Aracılığıyla paylaş


PostgreSQL için Azure Cosmos DB işlevleri

ŞUNLAR IÇIN GEÇERLIDIR: PostgreSQL için Azure Cosmos DB (PostgreSQL'e citus veritabanı uzantısıyla desteklenir)

Bu bölüm, PostgreSQL için Azure Cosmos DB tarafından sağlanan kullanıcı tanımlı işlevlere yönelik başvuru bilgilerini içerir. Bu işlevler PostgreSQL için Azure Cosmos DB'ye dağıtılmış işlevsellik sağlamaya yardımcı olur.

Not

Citus Altyapısı'nın eski sürümlerini çalıştıran kümeler bu sayfada listelenen tüm işlevleri sunmayabilir.

Tablo ve Parça DDL

citus_schema_distribute

Mevcut normal şemaları dağıtılmış şemalara dönüştürür. Dağıtılmış şemalar tek tek ortak konum gruplarıyla otomatik olarak ilişkilendirilir. Bu şemalarda oluşturulan tablolar, parça anahtarı olmadan birlikte bulunan dağıtılmış tablolara dönüştürülür. Şemayı dağıtma işlemi şemayı otomatik olarak atar ve kümedeki mevcut bir düğüme taşır.

Bağımsız değişkenler

schemaname: Dağıtılması gereken şemanın adı.

Dönüş değeri

Yok

Örnek

SELECT citus_schema_distribute('tenant_a');
SELECT citus_schema_distribute('tenant_b');
SELECT citus_schema_distribute('tenant_c');

Daha fazla örnek için bkz. Mikro hizmetler için nasıl yapılır tasarımı.

citus_schema_undistribute

Mevcut dağıtılmış şemayı normal bir şemaya dönüştürür. İşlem sonucunda tablolar ve veriler geçerli düğümden kümedeki koordinatör düğümüne geri taşınır.

Bağımsız değişkenler

schemaname: Dağıtılması gereken şemanın adı.

Dönüş değeri

Yok

Örnek

SELECT citus_schema_undistribute('tenant_a');
SELECT citus_schema_undistribute('tenant_b');
SELECT citus_schema_undistribute('tenant_c');

Daha fazla örnek için bkz. Mikro hizmetler için nasıl yapılır tasarımı.

create_distributed_table

create_distributed_table() işlevi, dağıtılmış bir tablo tanımlamak ve karma dağıtılmış bir tabloysa parçalarını oluşturmak için kullanılır. Bu işlev bir tablo adı, dağıtım sütunu ve isteğe bağlı bir dağıtım yöntemi alır ve tabloyu dağıtılmış olarak işaretlemek için uygun meta verileri ekler. Hiçbir dağıtım yöntemi belirtilmezse işlev varsayılan olarak 'karma' dağıtım olarak ayarlanır. Tablo karma dağıtılmışsa işlev, parça sayısı ve parça çoğaltma faktörü yapılandırma değerlerine göre çalışan parçaları da oluşturur. Tabloda herhangi bir satır varsa, bunlar otomatik olarak çalışan düğümlerine dağıtılır.

Bu işlev, master_create_distributed_table() ve ardından master_create_worker_shards() kullanımını değiştirir.

Bağımsız değişkenler

table_name: Dağıtılması gereken tablonun adı.

distribution_column: Tablonun dağıtılacağı sütun.

distribution_type: (İsteğe bağlı) Tablonun dağıtılacağı yöntem. İzin verilen değerler, varsayılan değeri 'karma' olan ekleme veya karma değerlerdir.

colocate_with: (İsteğe bağlı) geçerli tabloyu başka bir tablonun ortak konum grubuna ekleyin. Varsayılan olarak tablolar aynı türdeki sütunlar tarafından dağıtıldığında, aynı parça sayısına sahip olduğunda ve aynı çoğaltma faktörüne sahip olduğunda birlikte bulunur. için olası değerler colocate_with defaultnone, yeni bir ortak konum grubu başlatmak için veya bu tabloyla birlikte kullanılacak başka bir tablonun adıdır. (Bkz. tablo birlikte bulundurma.)

varsayılan değerinin colocate_with örtük birlikte bulundurma işlemi yaptığını unutmayın. Birlikte bulundurma , tablolar ilişkili olduğunda veya birleştirildiğinde harika bir şey olabilir. Ancak, iki tablo ilişkisiz olduğunda ancak dağıtım sütunları için aynı veri türünü kullandığında, bunları yanlışlıkla birlikte konumlandırmak parça yeniden dengeleme sırasında performansı düşürebilir. Tablo parçaları gereksiz yere bir "art arda" taşınacaktır.

Yeni bir dağıtılmış tablo diğer tablolarla ilgili değilse, belirtmek colocate_with => 'none'en iyisidir.

shard_count: (İsteğe bağlı) Yeni dağıtılmış tablo için oluşturulacak parça sayısı. Belirtirken shard_count , hiçbiri dışında bir değer colocate_with belirtemezsiniz. Mevcut bir tablo veya ortak konum grubunun parça sayısını değiştirmek için alter_distributed_table işlevini kullanın.

için shard_count olası değerler 1 ile 64000 arasındadır. En uygun değeri seçme konusunda rehberlik için bkz . Parça Sayısı.

Dönüş değeri

Yok

Örnek

Bu örnek, github_events tablosunun repo_id sütununda karma olarak dağıtılması gerektiğini veritabanına bildirir.

SELECT create_distributed_table('github_events', 'repo_id');

-- alternatively, to be more explicit:
SELECT create_distributed_table('github_events', 'repo_id',
                                colocate_with => 'github_repo');

create_distributed_table_concurrently

Bu işlev, create_distributed_function ile aynı arabirime ve amaca sahiptir, ancak tablo dağıtımı sırasında yazmaları engellemez.

Ancak, create_distributed_table_concurrently birkaç sınırlaması vardır:

  • İşlevi bir işlem bloğunda kullanamazsınız, bu da aynı anda yalnızca bir tablo dağıtabileceğiniz anlamına gelir. (Zaman bölümlenmiş tablolarda işlevini kullanabilirsiniz.)
  • Tabloya yabancı bir anahtar tarafından başvurulduğunda veya başka bir yerel tabloya başvurduğunda kullanamazsınız create_distributed_table_concurrently . Ancak, tablolara başvurmak için yabancı anahtarlar çalışır ve tablo dağıtımı tamamlandıktan sonra diğer dağıtılmış tablolar için yabancı anahtarlar oluşturabilirsiniz.
  • Tablonuzda birincil anahtar veya çoğaltma kimliği yoksa, mantıksal çoğaltmayla ilgili sınırlamalar nedeniyle tablo dağıtımı sırasında güncelleştirme ve silme komutları başarısız olur.

truncate_local_data_after_distributing_table

Tabloyu dağıttıktan sonra tüm yerel satırları keserek eski yerel kayıtlardan kaynaklanan kısıtlamaların başarısız olmasını önleyin. Kesme, belirlenen tabloya yabancı anahtar içeren tablolara basamaklar. Başvuruda bulunan tablolar kendi kendilerine dağıtılamıyorsa, bilgi tutarlılığını korumak için bu tablolar dağıtılana kadar kesilmesi yasaktır:

ERROR:  cannot truncate a table referenced in a foreign key constraint by a local table

Varsa, satırları dağıtım sırasında çalışan düğümlerine kopyalandığından, yerel koordinatör düğümü tablo verilerinin kesilmesi dağıtılmış tablolar için güvenlidir.

Bağımsız değişkenler

table_name: Koordinatör düğümündeki yerel karşılık gelenin kesilmesi gereken dağıtılmış tablonun adı.

Dönüş değeri

Yok

Örnek

-- requires that argument is a distributed table
SELECT truncate_local_data_after_distributing_table('public.github_events');

create_reference_table

create_reference_table() işlevi küçük bir başvuru veya boyut tablosu tanımlamak için kullanılır. Bu işlev bir tablo adı alır ve her çalışan düğümüne çoğaltılan tek bir parçayla dağıtılmış bir tablo oluşturur.

Bağımsız değişkenler

table_name: Dağıtılması gereken küçük boyutun veya başvuru tablosunun adı.

Dönüş değeri

Yok

Örnek

Bu örnek, nation tablosunun bir başvuru tablosu olarak tanımlanması gerektiğini veritabanına bildirir

SELECT create_reference_table('nation');

citus_add_local_table_to_metadata

Citus meta verilerine yerel bir Postgres tablosu ekler. Bu işlevin önemli bir kullanım örneği, koordinatördeki yerel tabloları kümedeki herhangi bir düğümden erişilebilir hale getirmektir. Yerel tabloyla ilişkili veriler koordinatörde kalır; yalnızca şeması ve meta verileri çalışanlara gönderilir.

Meta veriye yerel tablolar eklemek küçük bir ücrete tabidir. Tabloyu eklediğinizde Citus'un bölüm tablosunda bunu izlemesi gerekir. Meta veriye eklenen yerel tablolar, başvuru tablolarıyla aynı sınırlamaları devralır.

Tabloyu dağıttığınızda Citus, sonuçta elde edilen yerel tabloları meta verilerden kaldırır ve bu da bu tablolardaki bu sınırlamaları ortadan kaldırır.

Bağımsız değişkenler

table_name: Citus meta verilerine eklenecek koordinatördeki tablonun adı.

cascade_via_foreign_keys: (İsteğe bağlı) Bu bağımsız değişken "true" olarak ayarlandığında, citus_add_local_table_to_metadata verilen tabloyla yabancı anahtar ilişkisi içinde olan diğer tabloları otomatik olarak meta veriye ekler. Birçok tabloyu etkileyebileceği için bu parametreyle dikkatli olun.

Dönüş değeri

Yok

Örnek

Bu örnek, nation tablosunun herhangi bir düğümden erişilebilen bir koordinatör-yerel tablo olarak tanımlanması gerektiğini veritabanına bildirir:

SELECT citus_add_local_table_to_metadata('nation');

alter_distributed_table

alter_distributed_table() işlevi, dağıtılmış tablonun dağıtım sütununu, parça sayısını veya birlikte bulundurma özelliklerini değiştirmek için kullanılabilir.

Bağımsız değişkenler

table_name: Değiştirilecek tablonun adı.

distribution_column: (İsteğe bağlı) Yeni dağıtım sütununun adı.

shard_count: (İsteğe bağlı) Yeni parça sayısı.

colocate_with: (İsteğe bağlı) Geçerli dağıtılmış tablonun birlikte konumlandırılacağı tablo. Olası değerlerdefaultnone, yeni bir ortak konum grubu başlatmak için veya birlikte bulundurmak istediğiniz başka bir tablonun adıdır. (Bkz. tablo birlikte bulundurma.)

cascade_to_colocated: (İsteğe bağlı) Bu bağımsız değişken "true" shard_count olarak ayarlandığında ve colocate_with değişiklikler daha önce tabloyla birlikte bulunan tüm tablolara da uygulanır ve birlikte bulundurma korunur. "False" ise, bu tablonun geçerli birlikte bulundurması bozulur.

Dönüş değeri

Yok

Örnek

-- change distribution column
SELECT alter_distributed_table('github_events', distribution_column:='event_id');

-- change shard count of all tables in colocation group
SELECT alter_distributed_table('github_events', shard_count:=6, cascade_to_colocated:=true);

-- change colocation
SELECT alter_distributed_table('github_events', colocate_with:='another_table');

update_distributed_table_colocation

update_distributed_table_colocation() işlevi, dağıtılmış tablonun birlikte bulundurmasını güncelleştirmek için kullanılır. Bu işlev, dağıtılmış bir tablonun birlikte bulundurmasını kesmek için de kullanılabilir. PostgreSQL için Azure Cosmos DB, dağıtım sütunu aynı türdeyse iki tabloyu örtük olarak birlikte kullanır; tablolar ilişkiliyse ve bazı birleşimler yapacaksa bu yararlı olabilir. A ve B tabloları birlikte konumlandırılırsa ve A tablosu yeniden dengelenirse, B tablosu da yeniden dengelenir. B tablosunun çoğaltma kimliği yoksa yeniden dengeleme başarısız olur. Bu nedenle, bu işlev bu durumda örtük birlikte bulundurmayı bozmak yararlı olabilir.

Bu işlev fiziksel olarak herhangi bir veri taşımaz.

Bağımsız değişkenler

table_name: Tablo birlikte bulundurmasının güncelleştirileceği ad.

colocate_with: Tablonun birlikte bulunması gereken tablo.

Bir tablonun birlikte bulundurmasını kesmek istiyorsanız belirtmelisiniz colocate_with => 'none'.

Dönüş değeri

Yok

Örnek

Bu örnek, A tablosunun birlikte bulundurmasının B tablosunun birlikte konumu olarak güncelleştirildiğini gösterir.

SELECT update_distributed_table_colocation('A', colocate_with => 'B');

Birlikte bulundurmayı kesmek istiyorsanız, A ve B tablosunun birlikte bulunduğunu (muhtemelen örtük olarak) varsayın:

SELECT update_distributed_table_colocation('A', colocate_with => 'none');

Şimdi A, B tablosu, tablo C ve D tablosunun birlikte bulunduğunu ve A ve B tablosunu birlikte, C ve D tablosunu birlikte birleştirmek istediğinizi varsayalım:

SELECT update_distributed_table_colocation('C', colocate_with => 'none');
SELECT update_distributed_table_colocation('D', colocate_with => 'C');

None adlı karma dağıtılmış tablonuz varsa ve birlikte bulundurmasını güncelleştirmek istiyorsanız şunları yapabilirsiniz:

SELECT update_distributed_table_colocation('"none"', colocate_with => 'some_other_hash_distributed_table');

undistribute_table

undistribute_table() işlevi create_distributed_table veya create_reference_table eylemini geri alır. Dağıtılma işlemi, parçalardan alınan tüm verileri koordinatör düğümündeki yerel bir tabloya geri taşır (verilerin sığabileceği varsayılarak), sonra parçaları siler.

PostgreSQL için Azure Cosmos DB, cascade_via_foreign_keys bağımsız değişkeni true olarak ayarlanmadığı sürece yabancı anahtarlara sahip veya bunlara başvuruda bulunan tabloların dağıtımını kaldırmaz. Bu bağımsız değişken false ise (veya atlanırsa), dağıtılmadan önce sorunlu yabancı anahtar kısıtlamalarını el ile bırakmanız gerekir.

Bağımsız değişkenler

table_name: Dağıtılan veya dağıtılmayan başvuru tablosunun adı.

cascade_via_foreign_keys: (İsteğe bağlı) Bu bağımsız değişken "true" olarak ayarlandığında, undistribute_table yabancı anahtarlar aracılığıyla table_name ile ilgili tüm tabloların dağıtımlarını da kaldırın. Birçok tabloyu etkileyebileceği için bu parametreyle dikkatli olun.

Dönüş değeri

Yok

Örnek

Bu örnek bir github_events tabloyu dağıtır ve sonra dağıtılmaz.

-- first distribute the table
SELECT create_distributed_table('github_events', 'repo_id');

-- undo that and make it local again
SELECT undistribute_table('github_events');

create_distributed_function

Bir işlevi koordinatör düğümünden çalışanlara yayılır ve dağıtılmış yürütme için işaretler. Koordinatörde dağıtılmış bir işlev çağrıldığında PostgreSQL için Azure Cosmos DB, işlevi çalıştırmak üzere bir çalışan düğümü seçmek için "dağıtım bağımsız değişkeni" değerini kullanır. İşlevin çalışanlar üzerinde yürütülmesi paralelliği artırır ve daha düşük gecikme süresi için kodu parçalardaki verilere yaklaştırabilir.

Postgres arama yolu, dağıtılmış işlev yürütme sırasında düzenleyiciden çalışanlara yayılmaz, bu nedenle dağıtılmış işlev kodu veritabanı nesnelerinin adlarını tam olarak nitelemelidir. Ayrıca, işlevler tarafından yayılan bildirimler kullanıcıya gösterilmez.

Bağımsız değişkenler

function_name: Dağıtılacak işlevin adı. Birden çok işlev PostgreSQL'de aynı ada sahip olabileceğinden, adın işlevin parametre türlerini parantez içinde içermesi gerekir. Örneğin, 'foo(int)' uygulamasından 'foo(int, text)'farklıdır.

distribution_arg_name: (İsteğe bağlı) Dağıtılan bağımsız değişken adı. Kolaylık sağlamak için (veya işlev bağımsız değişkenlerinin adları yoksa), gibi '$1'bir konumsal yer tutucuya izin verilir. Bu parametre belirtilmezse, tarafından function_name adlı işlev yalnızca çalışanlarda oluşturulur. Gelecekte çalışan düğümleri eklenirse işlev de orada otomatik olarak oluşturulur.

colocate_with: (İsteğe bağlı) Dağıtılmış işlev dağıtılmış bir tabloyu (veya daha genel olarak ortak konum grubunu) okur veya yazarsa, bu tabloyu parametresini kullanarak adlandırdığınızdan colocate_with emin olun. Ardından işlevin her çağrısı ilgili parçaları içeren çalışan düğümünde çalıştırılır.

Dönüş değeri

Yok

Örnek

-- an example function which updates a hypothetical
-- event_responses table which itself is distributed by event_id
CREATE OR REPLACE FUNCTION
  register_for_event(p_event_id int, p_user_id int)
RETURNS void LANGUAGE plpgsql AS $fn$
BEGIN
  INSERT INTO event_responses VALUES ($1, $2, 'yes')
  ON CONFLICT (event_id, user_id)
  DO UPDATE SET response = EXCLUDED.response;
END;
$fn$;

-- distribute the function to workers, using the p_event_id argument
-- to determine which shard each invocation affects, and explicitly
-- colocating with event_responses which the function updates
SELECT create_distributed_function(
  'register_for_event(int, int)', 'p_event_id',
  colocate_with := 'event_responses'
);

alter_columnar_table_set

alter_columnar_table_set() işlevi sütunlu bir tablodaki ayarları değiştirir. Sütunlu olmayan bir tabloda bu işlevin çağrılması hata verir. Tablo adı dışındaki tüm bağımsız değişkenler isteğe bağlıdır.

Tüm sütunlu tabloların geçerli seçeneklerini görüntülemek için şu tabloya bakın:

SELECT * FROM columnar.options;

Yeni oluşturulan tablolar için sütunlu ayarların varsayılan değerleri şu GUC'lerle geçersiz kılınabilir:

  • columnar.compression
  • columnar.compression_level
  • columnar.stripe_row_count
  • columnar.chunk_row_count

Bağımsız değişkenler

table_name: Sütunlu tablonun adı.

chunk_row_count: (İsteğe bağlı) Yeni eklenen veriler için öbek başına en fazla satır sayısı. Mevcut veri öbekleri değiştirilmez ve bu maksimum değerden daha fazla satıra sahip olabilir. Varsayılan değer 10000'dir.

stripe_row_count: (İsteğe bağlı) Yeni eklenen veriler için şerit başına en fazla satır sayısı. Mevcut veri şeritleri değiştirilmez ve bu maksimum değerden daha fazla satıra sahip olabilir. Varsayılan değer 150000'dir.

sıkıştırma: (İsteğe bağlı) [none|pglz|zstd|lz4|lz4hc] Yeni eklenen veriler için sıkıştırma türü. Mevcut veriler yeniden sıkıştırılamaz veya sıkıştırılamaz. Varsayılan ve önerilen değer zstd'dir (destek içinde derlendiyse).

compression_level: (İsteğe bağlı) Geçerli ayarlar 1 ile 19 arasındadır. Sıkıştırma yöntemi seçilen düzeyi desteklemiyorsa, bunun yerine en yakın düzey seçilir.

Dönüş değeri

Yok

Örnek

SELECT alter_columnar_table_set(
  'my_columnar_table',
  compression => 'none',
  stripe_row_count => 10000);

alter_table_set_access_method

alter_table_set_access_method() işlevi tablonun erişim yöntemini değiştirir (örneğin, yığın veya sütunlu).

Bağımsız değişkenler

table_name: Erişim yöntemi değişecek olan tablonun adı.

access_method: Yeni erişim yönteminin adı.

Dönüş değeri

Yok

Örnek

SELECT alter_table_set_access_method('github_events', 'columnar');

create_time_partitions

create_time_partitions() işlevi, belirli bir zaman aralığını kapsayacak şekilde belirli bir aralığın bölümlerini oluşturur.

Bağımsız değişkenler

yeni bölümlerin oluşturulacağı table_name: (regclass) tablosu. Tablo tarih, zaman damgası veya zaman damgası türünde bir sütunda bölümlenmelidir.

partition_interval: yeni bölümlerde aralıkları ayarlarken kullanılacak , veya '1 month'gibi '2 hours'bir zaman aralığı.

end_at: (timestamptz) bu zamana kadar bölümler oluşturur. Son bölüm end_at noktasını içerir ve sonraki bölümler oluşturulmaz.

start_from: (timestamptz, isteğe bağlı) start_from noktasını içermesi için ilk bölümü seçin. Varsayılan değer şudur: now().

Dönüş değeri

Yeni bölümler oluşturması gerekiyorsa True, hepsi zaten varsa false.

Örnek

-- create a year's worth of monthly partitions
-- in table foo, starting from the current time

SELECT create_time_partitions(
  table_name         := 'foo',
  partition_interval := '1 month',
  end_at             := now() + '12 months'
);

drop_old_time_partitions

drop_old_time_partitions() işlevi, aralıkları belirli bir zaman damgasından önce gelen tüm bölümleri kaldırır. Bu işlevi kullanmaya ek olarak, sütunlu depolama ile eski bölümleri sıkıştırmak için alter_old_partitions_set_access_method düşünebilirsiniz.

Bağımsız değişkenler

bölümlerin kaldırılacağı table_name: (regclass) tablosu. Tablo tarih, zaman damgası veya zaman damgası türünde bir sütunda bölümlenmelidir.

older_than: (timestamptz) üst aralığı older_than küçük veya buna eşit olan bölümleri bırakır.

Dönüş değeri

Yok

Örnek

-- drop partitions that are over a year old

CALL drop_old_time_partitions('foo', now() - interval '12 months');

alter_old_partitions_set_access_method

Zaman çizelgeleri kullanım örneğinde tablolar genellikle zamana göre bölümlenir ve eski bölümler salt okunur sütunlu depolama alanına sıkıştırılır.

Bağımsız değişkenler

bölümlerin değiştirildiği parent_table_name: (regclass) tablosu. Tablo tarih, zaman damgası veya zaman damgası türünde bir sütunda bölümlenmelidir.

older_than: (zaman damgası), üst aralığı older_than küçük veya buna eşit olan bölümleri değiştirir.

new_access_method: (ad) satır tabanlı depolama için 'yığın' veya sütunlu depolama için 'columnar'.

Dönüş değeri

Yok

Örnek

CALL alter_old_partitions_set_access_method(
  'foo', now() - interval '6 months',
  'columnar'
);

Meta Veriler / Yapılandırma Bilgileri

get_shard_id_for_distribution_column

PostgreSQL için Azure Cosmos DB, dağıtılmış tablonun her satırını, satırın dağıtım sütununun değerine ve tablonun dağıtım yöntemine göre bir parçaya atar. Çoğu durumda, tam eşleme veritabanı yöneticisinin yoksayabileceği alt düzey bir ayrıntıdır. Ancak, el ile veritabanı bakım görevleri için veya yalnızca merakı gidermek için bir satırın parçasının belirlenmesi yararlı olabilir. get_shard_id_for_distribution_column işlevi karma dağıtılmış, aralık dağıtılmış ve başvuru tabloları için bu bilgileri sağlar. Ekleme dağıtımı için çalışmaz.

Bağımsız değişkenler

table_name: Dağıtılmış tablo.

distribution_value: Dağıtım sütununun değeri.

Dönüş değeri

PostgreSQL için Azure Cosmos DB parça kimliği, verilen tablonun dağıtım sütunu değeriyle ilişkilendirir.

Örnek

SELECT get_shard_id_for_distribution_column('my_table', 4);

 get_shard_id_for_distribution_column
--------------------------------------
                               540007
(1 row)

column_to_column_name

sütununu partkey pg_dist_partition metinsel sütun adına çevirir. Çeviri, dağıtılmış tablonun dağıtım sütununu belirlemek için kullanışlıdır.

Daha ayrıntılı bir tartışma için bkz . Dağıtım sütunu seçme.

Bağımsız değişkenler

table_name: Dağıtılmış tablo.

column_var_text: Tablosundaki pg_dist_partition değeripartkey.

Dönüş değeri

'nin dağıtım sütununun table_nameadı.

Örnek

-- get distribution column name for products table

SELECT column_to_column_name(logicalrelid, partkey) AS dist_col_name
  FROM pg_dist_partition
 WHERE logicalrelid='products'::regclass;

Çıktı:

┌───────────────┐
│ dist_col_name │
├───────────────┤
│ company_id    │
└───────────────┘

citus_relation_size

Belirtilen dağıtılmış tablonun tüm parçaları tarafından kullanılan disk alanını alın. Disk alanı "ana çatal" boyutunu içerir, ancak parçalar için görünürlük haritasını ve boş alan haritasını dışlar.

Bağımsız değişkenler

logicalrelid: Dağıtılmış tablonun adı.

Dönüş değeri

Boyutu bayt cinsinden bir bigint olarak.

Örnek

SELECT pg_size_pretty(citus_relation_size('github_events'));
pg_size_pretty
--------------
23 MB

citus_table_size

Belirtilen dağıtılmış tablonun tüm parçaları tarafından kullanılan disk alanını dizinler hariç (ANCAK TOAST, boş alan haritası ve görünürlük haritası dahil) alın.

Bağımsız değişkenler

logicalrelid: Dağıtılmış tablonun adı.

Dönüş değeri

Boyutu bayt cinsinden bir bigint olarak.

Örnek

SELECT pg_size_pretty(citus_table_size('github_events'));
pg_size_pretty
--------------
37 MB

citus_total_relation_size

Tüm dizinler ve TOAST verileri dahil olmak üzere belirtilen dağıtılmış tablonun tüm parçaları tarafından kullanılan toplam disk alanını alın.

Bağımsız değişkenler

logicalrelid: Dağıtılmış tablonun adı.

Dönüş değeri

Boyutu bayt cinsinden bir bigint olarak.

Örnek

SELECT pg_size_pretty(citus_total_relation_size('github_events'));
pg_size_pretty
--------------
73 MB

citus_stat_statements_reset

citus_stat_statements tüm satırları kaldırır. Bu işlev' den pg_stat_statements_reset()bağımsız olarak çalışır. Tüm istatistikleri sıfırlamak için her iki işlevi de çağırabilirsiniz.

Bağımsız değişkenler

Yok

Dönüş değeri

Hiçbiri

citus_get_active_worker_nodes

citus_get_active_worker_nodes() işlevi etkin çalışan ana bilgisayar adlarının ve bağlantı noktası numaralarının listesini döndürür.

Bağımsız değişkenler

Yok

Dönüş değeri

Her tanımlama kümesinin aşağıdaki bilgileri içerdiği tanımlama grupları listesi:

node_name: Çalışan düğümünün DNS adı

node_port: Veritabanı sunucusunun dinlediği çalışan düğümündeki bağlantı noktası

Örnek

SELECT * from citus_get_active_worker_nodes();
 node_name | node_port
-----------+-----------
 localhost |      9700
 localhost |      9702
 localhost |      9701

(3 rows)

Küme yönetimi ve onarımı

master_copy_shard_placement

Parça yerleşimi bir değişiklik komutu veya DDL işlemi sırasında güncelleştirilemezse etkin değil olarak işaretlenir. daha sonra master_copy_shard_placement işlevi, iyi durumdaki bir yerleştirmeden alınan veriler kullanılarak etkin olmayan parça yerleşimini onarmak için çağrılabilir.

Bir parça onarmak için işlev önce iyi durumda olmayan parça yerleşimini bırakır ve koordinatördeki şemayı kullanarak yeniden oluşturur. Parça yerleşimi oluşturulduktan sonra işlev, verileri iyi durumdaki yerleştirmeden kopyalar ve meta verileri güncelleştirerek yeni parça yerleşimini iyi durumda olarak işaretler. Bu işlev, parçanın onarım sırasında yapılan tüm eş zamanlı değişikliklere karşı korunmasını sağlar.

Bağımsız değişkenler

shard_id: Onarılacak parçanın kimliği.

source_node_name: İyi durumdaki parça yerleşiminin bulunduğu düğümün DNS adı ("kaynak" düğüm).

source_node_port: Veritabanı sunucusunun dinlediği kaynak çalışan düğümündeki bağlantı noktası.

target_node_name: Geçersiz parça yerleşiminin bulunduğu düğümün DNS adı ("hedef" düğüm).

target_node_port: Veritabanı sunucusunun dinlediği hedef çalışan düğümündeki bağlantı noktası.

Dönüş değeri

Yok

Örnek

Aşağıdaki örnek, 5432 numaralı bağlantı noktasındaki 'bad_host' üzerinde çalışan veritabanı sunucusunda bulunan 12345 numaralı parçanın etkin olmayan parça yerleşimini onaracaktır. Onarmak için, 5432 numaralı bağlantı noktasındaki 'good_host' üzerinde çalışan sunucuda bulunan iyi durumdaki parça yerleşiminden verileri kullanır.

SELECT master_copy_shard_placement(12345, 'good_host', 5432, 'bad_host', 5432);

master_move_shard_placement

Bu işlev belirli bir parçanın (ve onunla birlikte bulunan parçaların) bir düğümden diğerine taşınmasını sağlar. Genellikle parça yeniden dengeleme sırasında doğrudan bir veritabanı yöneticisi tarafından çağrılmak yerine dolaylı olarak kullanılır.

Verileri taşımanın iki yolu vardır: engelleme veya engellemeyi kaldırma. Engelleme yaklaşımı, taşıma sırasında parçadaki tüm değişikliklerin duraklatıldığı anlamına gelir. Parça yazmalarını engellemeyi önleyen ikinci yol, Postgres 10 mantıksal çoğaltmaya dayanır.

Başarılı bir taşıma işleminden sonra kaynak düğümdeki parçalar silinir. Taşıma işlemi herhangi bir noktada başarısız olursa, bu işlev bir hata oluşturur ve kaynak ve hedef düğümleri değişmeden bırakır.

Bağımsız değişkenler

shard_id: Taşınacak parçanın kimliği.

source_node_name: İyi durumdaki parça yerleşiminin bulunduğu düğümün DNS adı ("kaynak" düğüm).

source_node_port: Veritabanı sunucusunun dinlediği kaynak çalışan düğümündeki bağlantı noktası.

target_node_name: Geçersiz parça yerleşiminin bulunduğu düğümün DNS adı ("hedef" düğüm).

target_node_port: Veritabanı sunucusunun dinlediği hedef çalışan düğümündeki bağlantı noktası.

shard_transfer_mode: (İsteğe bağlı) PostgreSQL mantıksal çoğaltması mı yoksa çalışanlar arası COPY komutu mu kullanılacağını belirtmek için çoğaltma yöntemini belirtin. Olası değerler:

  • auto: Mantıksal çoğaltma mümkünse çoğaltma kimliği gerektir, aksi takdirde eski davranışı kullanın (örneğin parça onarımı için PostgreSQL 9.6). Bu varsayılan değerdir.
  • force_logical: Tabloda çoğaltma kimliği olmasa bile mantıksal çoğaltmayı kullanın. Tablodaki tüm eş zamanlı güncelleştirme/silme deyimleri çoğaltma sırasında başarısız olur.
  • block_writes: Birincil anahtar veya çoğaltma kimliği olmayan tablolar için COPY (yazmaları engelleme) kullanın.

Dönüş değeri

Yok

Örnek

SELECT master_move_shard_placement(12345, 'from_host', 5432, 'to_host', 5432);

rebalance_table_shards

rebalance_table_shards() işlevi, verilen tablonun parçalarını çalışanlar arasında eşit bir şekilde dağıtmak için taşır. İşlev öncelikle kümenin belirtilen eşik içinde dengelendiğinden emin olmak için yapması gereken taşımaların listesini hesaplar. Ardından parça yerleşimlerini kaynak düğümden hedef düğüme tek tek taşır ve ilgili parça meta verilerini taşımayı yansıtacak şekilde güncelleştirir.

Parçaların "eşit olarak dağıtılıp dağıtılmadığını" belirlerken her parçaya bir maliyet atanır. Varsayılan olarak her parça aynı maliyete (1 değeri) sahiptir, bu nedenle çalışanlar arasında maliyeti eşitlemek için dağıtmak, her bir parça üzerindeki parça sayısını eşitlemeyle aynıdır. Sabit maliyet stratejisi "by_shard_count" olarak adlandırılır ve varsayılan yeniden dengeleme stratejisidir.

"by_shard_count" stratejisi şu koşullarda uygundur:

  • Parçalar kabaca aynı boyutta
  • Parçalar kabaca aynı miktarda trafik alır
  • Çalışan düğümlerinin tümü aynı boyutta/türde
  • Parçalar belirli çalışanlara sabitlenmedi

Bu varsayımlardan herhangi biri tutmazsa, "by_shard_count" yeniden dengelemek kötü bir plana neden olabilir.

Varsayılan yeniden dengeleme stratejisi "by_disk_size"dir. Parametresini kullanarak her zaman stratejiyi rebalance_strategy özelleştirebilirsiniz.

gerçekleştirilecek eylemleri görmek ve doğrulamak için rebalance_table_shards çalıştırmadan önce get_rebalance_table_shards_plan çağırmanız önerilir.

Bağımsız değişkenler

table_name: (İsteğe bağlı) Parçalarının yeniden dengelenmesi gereken tablonun adı. NULL ise, mevcut tüm ortak konum gruplarını yeniden dengeleyin.

eşik: (İsteğe bağlı) Ortalama kullanımdan düğüm kullanımının en yüksek fark oranını gösteren 0,0 ile 1,0 arasında bir kayan sayıdır. Örneğin, 0,1 değerinin belirtilmesi, parça yeniden dengeleyicinin tüm düğümleri aynı sayıda parça ± %10 tutacak şekilde dengelemeye çalışmasına neden olur. Özellikle, parça yeniden dengeleyici tüm çalışan düğümlerinin kullanımını (1 - eşik) * average_utilization ... (1

  • eşik) * average_utilization aralığı.

max_shard_moves: (İsteğe bağlı) Taşınacak parça sayısı üst sınırı.

excluded_shard_list: (İsteğe bağlı) Yeniden dengeleme işlemi sırasında taşınmaması gereken parçaların tanımlayıcıları.

shard_transfer_mode: (İsteğe bağlı) PostgreSQL mantıksal çoğaltması mı yoksa çalışanlar arası COPY komutu mu kullanılacağını belirtmek için çoğaltma yöntemini belirtin. Olası değerler:

  • auto: Mantıksal çoğaltma mümkünse çoğaltma kimliği gerektir, aksi takdirde eski davranışı kullanın (örneğin parça onarımı için PostgreSQL 9.6). Bu varsayılan değerdir.
  • force_logical: Tabloda çoğaltma kimliği olmasa bile mantıksal çoğaltmayı kullanın. Tablodaki tüm eş zamanlı güncelleştirme/silme deyimleri çoğaltma sırasında başarısız olur.
  • block_writes: Birincil anahtar veya çoğaltma kimliği olmayan tablolar için COPY (yazmaları engelleme) kullanın.

drain_only: (İsteğe bağlı) True olduğunda, parçaları pg_dist_node içinde false olarak ayarlanmış çalışan shouldhaveshards düğümlerinden taşıyın; başka parça taşımayın.

rebalance_strategy: (İsteğe bağlı) pg_dist_rebalance_strategy bir stratejinin adı. Bu bağımsız değişken atlanırsa, işlev tabloda gösterildiği gibi varsayılan stratejiyi seçer.

Dönüş değeri

Yok

Örnek

Aşağıdaki örnek, github_events tablosunun parçalarını varsayılan eşik içinde yeniden dengelemeyi dener.

SELECT rebalance_table_shards('github_events');

Bu örnek kullanım, 1 ve 2 kimlikli parçaları taşımadan github_events tablosunu yeniden dengelemeyi dener.

SELECT rebalance_table_shards('github_events', excluded_shard_list:='{1,2}');

get_rebalance_table_shards_plan

rebalance_table_shards planlı parça hareketlerini gerçekleştirmeden çıkış yapın. Olası olmasa da, get_rebalance_table_shards_plan aynı bağımsız değişkenlere sahip bir rebalance_table_shards çağrısının yapacağından biraz farklı bir plan oluşturabilir. Bunlar aynı anda yürütülmezse kümeyle ilgili olgular (örneğin, disk alanı) çağrılar arasında farklılık gösterebilir.

Bağımsız değişkenler

rebalance_table_shards ile aynı bağımsız değişkenler: ilişki, eşik, max_shard_moves, excluded_shard_list ve drain_only. Bağımsız değişkenlerin anlamı için bu işlevin belgelerine bakın.

Dönüş değeri

Bu sütunları içeren demetler:

  • table_name: Parçaları taşınan tablo
  • shardid: Söz konusu parça
  • shard_size: Bayt cinsinden boyut
  • sourcename: Kaynak düğümün ana bilgisayar adı
  • sourceport: Kaynak düğümün bağlantı noktası
  • targetname: Hedef düğümün ana bilgisayar adı
  • targetport: Hedef düğümün bağlantı noktası

get_rebalance_progress

Parça yeniden dengelemesi başladıktan sonra işlev, get_rebalance_progress() ilgili her parçanın ilerleme durumunu listeler. tarafından rebalance_table_shards()planlanan ve yürütülen taşımaları izler.

Bağımsız değişkenler

Yok

Dönüş değeri

Bu sütunları içeren demetler:

  • sessionid: Yeniden dengeleme izleyicisinin Postgres PID'i
  • table_name: Parçaları taşınan tablo
  • shardid: Söz konusu parça
  • shard_size: Bayt cinsinden boyut
  • sourcename: Kaynak düğümün ana bilgisayar adı
  • sourceport: Kaynak düğümün bağlantı noktası
  • targetname: Hedef düğümün ana bilgisayar adı
  • targetport: Hedef düğümün bağlantı noktası
  • progress: 0 = taşınmayı bekliyor; 1 = taşıma; 2 = tamamlandı

Örnek

SELECT * FROM get_rebalance_progress();
┌───────────┬────────────┬─────────┬────────────┬───────────────┬────────────┬───────────────┬────────────┬──────────┐
│ sessionid │ table_name │ shardid │ shard_size │  sourcename   │ sourceport │  targetname   │ targetport │ progress │
├───────────┼────────────┼─────────┼────────────┼───────────────┼────────────┼───────────────┼────────────┼──────────┤
│      7083 │ foo        │  102008 │    1204224 │ n1.foobar.com │       5432 │ n4.foobar.com │       5432 │        0 │
│      7083 │ foo        │  102009 │    1802240 │ n1.foobar.com │       5432 │ n4.foobar.com │       5432 │        0 │
│      7083 │ foo        │  102018 │     614400 │ n2.foobar.com │       5432 │ n4.foobar.com │       5432 │        1 │
│      7083 │ foo        │  102019 │       8192 │ n3.foobar.com │       5432 │ n4.foobar.com │       5432 │        2 │
└───────────┴────────────┴─────────┴────────────┴───────────────┴────────────┴───────────────┴────────────┴──────────┘

citus_add_rebalance_strategy

pg_dist_rebalance_strategy için bir satır ekleme.

Bağımsız değişkenler

Bu bağımsız değişkenler hakkında daha fazla bilgi için içindeki ilgili sütun değerlerine pg_dist_rebalance_strategybakın.

name: yeni strateji tanımlayıcısı

shard_cost_function: Her parçanın "maliyetini" belirlemek için kullanılan işlevi tanımlar

node_capacity_function: Düğüm kapasitesini ölçme işlevini tanımlar

shard_allowed_on_node_function: Hangi parçaların hangi düğümlere yerleştirilebileceğini belirleyen işlevi tanımlar

default_threshold: Birikmeli parça maliyetinin düğümler arasında ne kadar hassas bir şekilde dengelenmesi gerektiğini ayarlayan kayan nokta eşiği

minimum_threshold: (İsteğe bağlı) rebalance_table_shards() eşik bağımsız değişkeni için izin verilen en düşük değeri tutan bir koruma sütunu. Varsayılan değeri 0'dır

Dönüş değeri

Yok

citus_set_default_rebalance_strategy

pg_dist_rebalance_strategy tablosunu güncelleştirin ve bağımsız değişkeniyle adlandırılan stratejiyi parçaları yeniden dengelerken seçilen varsayılan strateji olacak şekilde değiştirebilirsiniz.

Bağımsız değişkenler

name: pg_dist_rebalance_strategy stratejinin adı

Dönüş değeri

Yok

Örnek

SELECT citus_set_default_rebalance_strategy('by_disk_size');

citus_remote_connection_stats

citus_remote_connection_stats() işlevi, her uzak düğüme yönelik etkin bağlantı sayısını gösterir.

Bağımsız değişkenler

Yok

Örnek

SELECT * from citus_remote_connection_stats();
    hostname    | port | database_name | connection_count_to_node
----------------+------+---------------+--------------------------
 citus_worker_1 | 5432 | postgres      |                        3
(1 row)

isolate_tenant_to_new_shard

Bu işlev, dağıtım sütununda belirli bir tek değere sahip satırları tutmak için yeni bir parça oluşturur. Özellikle büyük bir kiracının tek başına kendi parçasına ve sonuçta kendi fiziksel düğümüne yerleştirilebildiği çok kiracılı kullanım örneği için kullanışlıdır.

Bağımsız değişkenler

table_name: Yeni parça almak için tablonun adı.

tenant_id: Yeni parçaya atanacak dağıtım sütununun değeri.

cascade_option: (İsteğe bağlı) "CASCADE" olarak ayarlandığında, bir parça da geçerli tablonun ortak konum grubundaki tüm tablolardan yalıtır.

Dönüş değeri

shard_id: İşlev, yeni oluşturulan parçaya atanan benzersiz kimliği döndürür.

Örnekler

Kiracı 135'in lineitem'lerini tutmak için yeni bir parça oluşturun:

SELECT isolate_tenant_to_new_shard('lineitem', 135);
┌─────────────────────────────┐
│ isolate_tenant_to_new_shard │
├─────────────────────────────┤
│                      102240 │
└─────────────────────────────┘

Sonraki adımlar