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
default
none
, 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ğerlerdefault
none
, 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_name
adı.
Ö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_strategy
bakı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
- Bu makaledeki işlevlerin çoğu sistem meta veri tablolarını değiştirir
- Sunucu parametreleri bazı işlevlerin davranışını özelleştirir