جداول وطرق عرض نظام Azure Cosmos DB ل PostgreSQL
ينطبق على: Azure Cosmos DB ل PostgreSQL (مدعوم بملحق قاعدة بيانات Citus إلى PostgreSQL)
يقوم Azure Cosmos DB ل PostgreSQL بإنشاء وصيانة جداول خاصة تحتوي على معلومات حول البيانات الموزعة في نظام المجموعة. تستشير عقدة المنسق هذه الجداول عند التخطيط لكيفية تشغيل الاستعلامات عبر العقد العاملة.
بيانات التعريف للمنسق
يقسم Azure Cosmos DB ل PostgreSQL كل جدول موزع إلى أجزاء منطقية متعددة استنادا إلى عمود التوزيع. ثم يحتفظ المنسق بجداول بيانات التعريف لتتبع الإحصاءات والمعلومات حول سلامة وموقع هذه الأجزاء.
في هذا القسم، نصف كل جدول من جداول بيانات التعريف ومخططها. يمكنك عرض هذه الجداول والاستعلام عنها باستخدام SQL بعد تسجيل الدخول إلى عقدة المنسق.
إشعار
قد لا تقدم المجموعات التي تعمل بالإصدارات القديمة من Citus Engine جميع الجداول المدرجة أدناه.
جدول التقسيم
يخزن الجدول pg_dist_partition بيانات التعريف حول الجداول التي يتم توزيعها في قاعدة البيانات. لكل جدول موزَّع، فإنه يخزن أيضاً معلومات حول طريقة التوزيع ومعلومات مفصلة حول عمود التوزيع.
Name | كتابة | الوصف |
---|---|---|
logicalrelid | regclass | الجدول الموزَّع الذي يتوافق معه هذا الصف. تشير هذه القيمة إلى عمود relfilenode في جدول كتالوج نظام pg_class. |
partmethod | حرف | الطريقة المستخدمة من أجل التقسيم / التوزيع. يتم إلحاق قيم هذا العمود المقابلة لأساليب التوزيع المختلفة: "a"، علامة التجزئة: "h"، الجدول المرجعي: "n" |
partkey | النص | معلومات مفصلة حول عمود التوزيع بما في ذلك رقم العمود والنوع والمعلومات الأخرى ذات الصلة. |
colocationid | integer | مجموعة تحديد الموقع التي ينتمي إليها هذا الجدول. تسمح الجداول الموجودة في نفس المجموعة بالصلات ذات الموقع المشترك والتجميعات الموزَّعة بين التحسينات الأخرى. تشير هذه القيمة إلى عمود تحديد الموقع في جدول pg_dist_colocation. |
repmodel | حرف | الأسلوب المستخدم للنسخ المتماثل الخاص بالبيانات. قيم هذا العمود المطابقة لأساليب النسخ المختلفة هي: النسخ المتماثل المستند إلى عبارة Citus: وهو 'c'، النسخ المتماثل المتدفق postgresql: وهو 's'، الالتزام على مرحلتين (للجداول المرجعية): 't' |
SELECT * from pg_dist_partition;
logicalrelid | partmethod | partkey | colocationid | repmodel
---------------+------------+------------------------------------------------------------------------------------------------------------------------+--------------+----------
github_events | h | {VAR :varno 1 :varattno 4 :vartype 20 :vartypmod -1 :varcollid 0 :varlevelsup 0 :varnoold 1 :varoattno 4 :location -1} | 2 | c
(1 row)
جدول أجزاء
يخزن الجدول pg_dist_shard بيانات التعريف حول الأجزاء الفردية الخاصة بالجدول. يحتوي Pg_dist_shard على معلومات عن أجزاء الجدول الموزعة التي تنتمي إليها، بالإضافة إلي إحصاءات عن عمود التوزيع للأجزاء. بالنسبة إلى إلحاق الجداول الموزَّعة، تتوافق هذه الإحصائيات مع القيم الدنيا/القصوى لعمود التوزيع. بالنسبة لجداول التجزئة الموزَّعة، فهي نطاقات رمز التجزئة المعينة لهذا الجزء. تستخدم هذه الإحصائيات لتقليص الأجزاء غير المرتبطة أثناء استعلامات SELECT.
Name | كتابة | الوصف |
---|---|---|
logicalrelid | regclass | الجدول الموزَّع الذي يتوافق معه هذا الصف. تشير هذه القيمة إلى عمود relfilenode في جدول كتالوج نظام pg_class. |
shardid | عدد صحيح كبير | معرف فريد عالميًا تم تعيينه لهذا الجزء. |
shardstorage | حرف | نوع التخزين المستخدم لهذا الجزء. تمت مناقشة أنواع التخزين المختلفة في الجدول أدناه. |
shardminvalue | النص | بالنسبة إلى إلحاق الجداول الموزعة، الحد الأدنى لقيمة عمود التوزيع في هذا الجزء (ضمنًا). بالنسبة للجداول الموزعة للتجزئة، يعين الحد الأدنى لقيمة الرمز المميز للتجزئة المعين لذلك الجزء (ضمنًا). |
shardmaxvalue | النص | بالنسبة إلى إلحاق الجداول الموزعة، الحد الأقصى لقيمة عمود التوزيع في هذا الجزء (ضمنًا). بالنسبة للجداول الموزعة للتجزئة، يعين الحد الأقصى لقيمة الرمز المميز للتجزئة المعين لذلك الجزء (ضمنًا). |
SELECT * from pg_dist_shard;
logicalrelid | shardid | shardstorage | shardminvalue | shardmaxvalue
---------------+---------+--------------+---------------+---------------
github_events | 102026 | t | 268435456 | 402653183
github_events | 102027 | t | 402653184 | 536870911
github_events | 102028 | t | 536870912 | 671088639
github_events | 102029 | t | 671088640 | 805306367
(4 rows)
أنواع التخزين الخاص بالأجزاء
يشير عمود تخزين الجزء الموجود في pg_dist_shard إلى نوع التخزين المستخدم في الجزء. فيما يلي نظرة عامة موجزة على أنواع تخزين الأجزاء المختلفة وتمثيلها.
نوع التخزين | قيمة Shardstorage | الوصف |
---|---|---|
TABLE | 't' | يشير إلى أن الجزء يخزن بيانات تنتمي إلى جدول موزع منتظم. |
COLUMNAR | 'c' | يشير إلى أن الجزء يخزن البيانات العمودية. (مستخدمة بواسطة جداول cstore_fdw الموزَّعة) |
FOREIGN | 'f' | يشير إلى أن الجزء يخزن البيانات الخارجية. (مستخدمة بواسطة جداول file_fdw الموزَّعة) |
عرض معلومات أجزاء
بالإضافة إلى جدول بيانات تعريف الجزء منخفض المستوى الموضح أعلاه، يوفر Azure Cosmos DB ل PostgreSQL طريقة citus_shards
عرض للتحقق بسهولة:
- حيث يكون كل جزء (عقدة ومنفذ)،
- ما نوع الجدول الذي ينتمي إليه، و
- حجمه
تساعدك طريقة العرض هذه على فحص الأجزاء للعثور، من بين أشياء أخرى، على أي اختلالات في الحجم عبر العقد.
SELECT * FROM citus_shards;
.
table_name | shardid | shard_name | citus_table_type | colocation_id | nodename | nodeport | shard_size
------------+---------+--------------+------------------+---------------+-----------+----------+------------
dist | 102170 | dist_102170 | distributed | 34 | localhost | 9701 | 90677248
dist | 102171 | dist_102171 | distributed | 34 | localhost | 9702 | 90619904
dist | 102172 | dist_102172 | distributed | 34 | localhost | 9701 | 90701824
dist | 102173 | dist_102173 | distributed | 34 | localhost | 9702 | 90693632
ref | 102174 | ref_102174 | reference | 2 | localhost | 9701 | 8192
ref | 102174 | ref_102174 | reference | 2 | localhost | 9702 | 8192
dist2 | 102175 | dist2_102175 | distributed | 34 | localhost | 9701 | 933888
dist2 | 102176 | dist2_102176 | distributed | 34 | localhost | 9702 | 950272
dist2 | 102177 | dist2_102177 | distributed | 34 | localhost | 9701 | 942080
dist2 | 102178 | dist2_102178 | distributed | 34 | localhost | 9702 | 933888
يشير colocation_id إلى مجموعة الموقع المشترك.
جدول موضع الأجزاء
يتعقب الجدول pg_dist_placement الموقع الخاص بالنسخ المتماثلة للأجزاء على العقد العاملة. تسمى كل نسخة متماثلة من جزء معين لعقدة معينة موضع جزء. يخزن هذا الجدول معلومات عن صحة وموقع كل موضع جزء.
Name | كتابة | الوصف |
---|---|---|
shardid | عدد صحيح كبير | معرف الجزء المرتبط بهذا الموضع. تشير هذه القيمة إلى عمود معرف الجزء في جدول كتالوج pg_dist_shard. |
shardstate | العدد الصحيح | يصف حالة هذا التنسيب. نوقشت حالات الأجزاء المختلفة في القسم الوارد أدناه. |
shardlength | عدد صحيح كبير | بالنسبة للجداول الموزعة الملحقة، حجم موضع الجزء على عقدة العامل بالبايت. بالنسبة لجداول التجزئة الموزَّعة، صفر. |
placementid | عدد صحيح كبير | معرّف فريد مُنشأ تلقائياً لكل موضع على حدة. |
groupid | العدد الصحيح | يشير إلى مجموعة من خادم أساسي واحد وخوادم ثانوية صفرية أو أكثر عند استخدام نموذج النسخ المتماثل المتدفق. |
SELECT * from pg_dist_placement;
shardid | shardstate | shardlength | placementid | groupid
---------+------------+-------------+-------------+---------
102008 | 1 | 0 | 1 | 1
102008 | 1 | 0 | 2 | 2
102009 | 1 | 0 | 3 | 2
102009 | 1 | 0 | 4 | 3
102010 | 1 | 0 | 5 | 3
102010 | 1 | 0 | 6 | 4
102011 | 1 | 0 | 7 | 4
الحالات الخاصة بموضع الأجزاء
يدير Azure Cosmos DB ل PostgreSQL صحة الأجزاء على أساس كل موضع. إذا وضع موضع النظام في حالة غير متناسقة، فإن Azure Cosmos DB ل PostgreSQL يضع علامة عليه تلقائيا على أنه غير متوفر. تسجل حالة الموضع في الجدول pg_dist_shard_placement، داخل عمود shardstate. فيما يلي نظرة عامة موجزة على حالات وضع الأجزاء المختلفة:
اسم الولاية | قيمة Shardstate | الوصف |
---|---|---|
FINALIZED | 1 | تنشأ الأجزاء الجديدة للحالة في. تعد مواضع الأجزاء في هذه الحالة محدثة وتستخدم في تخطيط الاستعلام وتنفيذه. |
isactive | 3 | تعد مواضع الأجزاء في هذه الحالة غير نشطة نظرًا لكونها غير متزامنة مع النسخ المتماثلة الأخرى للجزء نفسه. يمكن أن تحدث الحالة عند فشل عملية إلحاق أو تعديل (INSERT أو UPDATE أو DELETE) أو عملية DDL لهذا الموضع. سيتجاهل مخطط الاستعلام المواضع في هذه الحالة أثناء التخطيط والتنفيذ. يمكن للمستخدمين مزامنة البيانات الموجودة في هذه الأجزاء مع نسخة متماثلة نهائية كنشاط في الخلفية. |
لحذف | 4 | إذا حاول Azure Cosmos DB ل PostgreSQL إسقاط موضع جزء استجابة لاستدعاء master_apply_delete_command وفشل، يتم نقل الموضع إلى هذه الحالة. يمكن للمستخدمين بعد ذلك حذف هذه الأجزاء كنشاط مهمة في الخلفية لاحق. |
جدول عقدة العامل
يحتوي الجدول pg_dist_node على معلومات حول العقد العاملة في نظام المجموعة.
Name | كتابة | الوصف |
---|---|---|
nodeid | العدد الصحيح | المعرف المُنشأ تلقائياً لعقدة فردية. |
groupid | العدد الصحيح | المعرف المستخدم من أجل الإشارة إلى مجموعة من خادم أساسي واحد وخوادم ثانوية صفرية أو أكثر، عند استخدام نموذج النسخ المتماثل المتدفق. بشكل افتراضي، يكون هو نفسه معرّف العقدة. |
nodename | النص | اسم المضيف أو عنوان IP لعقدة العامل PostgreSQL. |
nodeport | العدد الصحيح | رقم المنفذ الذي تستمع إليه عقدة العامل PostgreSQL. |
noderack | النص | (اختياري) معلومات وضع الرف للعقدة العاملة. |
hasmetadata | boolean | محجوز للاستخدام الداخلي. |
isactive | boolean | سواء كانت العقدة نشطة في قبول مواضع الأجزاء أم لا. |
noderole | النص | ما إذا كانت العقدة أساسية أو ثانوية |
nodecluster | النص | اسم نظام المجموعة التي تحتوي على هذه العقدة |
shouldhaveshards | boolean | إذا كانت خاطئة، فسيتم نقل القطع من العقدة (التي يتم تصريفها) عند إعادة التوازن، ولن يتم وضع الأجزاء من الجداول الموزَّعة الجديدة على العقدة، ما لم يتم نقلها إلى مكان مع الأجزاء الموجودة بالفعل |
SELECT * from pg_dist_node;
nodeid | groupid | nodename | nodeport | noderack | hasmetadata | isactive | noderole | nodecluster | shouldhaveshards
--------+---------+-----------+----------+----------+-------------+----------+----------+-------------+------------------
1 | 1 | localhost | 12345 | default | f | t | primary | default | t
2 | 2 | localhost | 12346 | default | f | t | primary | default | t
3 | 3 | localhost | 12347 | default | f | t | primary | default | t
(3 rows)
جدول العنصر الموزَّع
يحتوي الجدول citus.pg_dist_object على قائمة بالعناصر مثل الأنواع والوظائف التي تم إنشاؤها على عقدة المنسق ونشرها إلى العقد العاملة. عندما يضيف المسؤول عقد عاملة جديدة إلى نظام المجموعة، يقوم Azure Cosmos DB ل PostgreSQL تلقائيا بإنشاء نسخ من الكائنات الموزعة على العقد الجديدة (بالترتيب الصحيح لتلبية تبعيات الكائن).
Name | كتابة | الوصف |
---|---|---|
classid | معرف العنصر | فئة العنصر الموزَّع |
objid | معرف العنصر | معرف العنصر للعنصر الموزَّع |
objsubid | integer | المعرف الفرعي للعنصر الموزَّع، على سبيل المثال، attnum |
النوع | النص | جزء من العنوان الثابت المستخدم أثناء ترقيات pg |
object_names | text[] | جزء من العنوان الثابت المستخدم أثناء ترقيات pg |
object_args | text[] | جزء من العنوان الثابت المستخدم أثناء ترقيات pg |
distribution_argument_index | integer | صالحة فقط للوظائف/الإجراءات الموزَّعة |
colocationid | integer | صالحة فقط للوظائف/الإجراءات الموزَّعة |
تحدد "العناوين الثابتة" العناصر بشكل فريد بشكل مستقل عن خادم معين. يتعقب Azure Cosmos DB ل PostgreSQL الكائنات أثناء ترقية PostgreSQL باستخدام عناوين مستقرة تم إنشاؤها باستخدام الدالة pg_identify_object_as_address().
فيما يلي مثال لكيفية إضافة create_distributed_function()
adds entries to the citus.pg_dist_object
:
CREATE TYPE stoplight AS enum ('green', 'yellow', 'red');
CREATE OR REPLACE FUNCTION intersection()
RETURNS stoplight AS $$
DECLARE
color stoplight;
BEGIN
SELECT *
FROM unnest(enum_range(NULL::stoplight)) INTO color
ORDER BY random() LIMIT 1;
RETURN color;
END;
$$ LANGUAGE plpgsql VOLATILE;
SELECT create_distributed_function('intersection()');
-- will have two rows, one for the TYPE and one for the FUNCTION
TABLE citus.pg_dist_object;
-[ RECORD 1 ]---------------+------
classid | 1247
objid | 16780
objsubid | 0
type |
object_names |
object_args |
distribution_argument_index |
colocationid |
-[ RECORD 2 ]---------------+------
classid | 1255
objid | 16788
objsubid | 0
type |
object_names |
object_args |
distribution_argument_index |
colocationid |
طريقة عرض المخططات الموزعة
قدم Citus 12.0 مفهوم التقسيم المستند إلى المخطط ومعه طريقة العرض "citus_schemas"، والتي توضح المخططات التي تم توزيعها في النظام. تسرد طريقة العرض المخططات الموزعة فقط، ولا يتم عرض المخططات المحلية.
Name | كتابة | الوصف |
---|---|---|
schema_name | regnamespace | اسم المخطط الموزع |
colocation_id | integer | معرف الموقع المشترك للمخطط الموزع |
schema_size | النص | ملخص الحجم القابل للقراءة البشرية لكافة الكائنات داخل المخطط |
schema_owner | الاسم | الدور الذي يمتلك المخطط |
وفيما يلي مثال على ذلك:
schema_name | colocation_id | schema_size | schema_owner
-------------+---------------+-------------+--------------
userservice | 1 | 0 bytes | userservice
timeservice | 2 | 0 bytes | timeservice
pingservice | 3 | 632 kB | pingservice
عرض الجداول الموزَّعة
citus_tables
تعرض طريقة العرض ملخصا لجميع الجداول التي يديرها Azure Cosmos DB ل PostgreSQL (الجداول الموزعة والمرجعية). يجمع العرض بين المعلومات من Azure Cosmos DB لجداول بيانات التعريف PostgreSQL للحصول على نظرة عامة سهلة وقابلة للقراءة من قبل الإنسان لخصائص الجدول هذه:
- نوع الجدول
- عمود التوزيع
- معرّف مجموعة Colocation
- حجم يمكن قراءته من قبل الإنسان
- أجزاء العد
- المالك (مستخدم قاعدة البيانات)
- طريقة الوصول (كومة أو عمودي)
وفيما يلي مثال على ذلك:
SELECT * FROM citus_tables;
┌────────────┬──────────────────┬─────────────────────┬───────────────┬────────────┬─────────────┬─────────────┬───────────────┐
│ table_name │ citus_table_type │ distribution_column │ colocation_id │ table_size │ shard_count │ table_owner │ access_method │
├────────────┼──────────────────┼─────────────────────┼───────────────┼────────────┼─────────────┼─────────────┼───────────────┤
│ foo.test │ distributed │ test_column │ 1 │ 0 bytes │ 32 │ citus │ heap │
│ ref │ reference │ <none> │ 2 │ 24 GB │ 1 │ citus │ heap │
│ test │ distributed │ id │ 1 │ 248 TB │ 32 │ citus │ heap │
└────────────┴──────────────────┴─────────────────────┴───────────────┴────────────┴─────────────┴─────────────┴───────────────┘
عرض أقسام الوقت
يوفر Azure Cosmos DB ل PostgreSQL UDFs لإدارة أقسام حالة استخدام بيانات Timeseries. كما أنه يحتفظ بطريقة عرض time_partitions
لفحص الأقسام التي يديرها.
الأعمدة
- parent_table الجدول المقسم
- partition_column العمود الذي تم تقسيم الجدول الأصلي عليه
- القسم اسم جدول الأقسام
- from_value الحد الأدنى في الوقت للصفوف في هذا القسم
- to_value الحد الأعلى في الوقت للصفوف في هذا القسم
- access_method كومة للتخزين المستند إلى الصفوف والعمودية للتخزين العمودي
SELECT * FROM time_partitions;
┌────────────────────────┬──────────────────┬─────────────────────────────────────────┬─────────────────────┬─────────────────────┬───────────────┐
│ parent_table │ partition_column │ partition │ from_value │ to_value │ access_method │
├────────────────────────┼──────────────────┼─────────────────────────────────────────┼─────────────────────┼─────────────────────┼───────────────┤
│ github_columnar_events │ created_at │ github_columnar_events_p2015_01_01_0000 │ 2015-01-01 00:00:00 │ 2015-01-01 02:00:00 │ columnar │
│ github_columnar_events │ created_at │ github_columnar_events_p2015_01_01_0200 │ 2015-01-01 02:00:00 │ 2015-01-01 04:00:00 │ columnar │
│ github_columnar_events │ created_at │ github_columnar_events_p2015_01_01_0400 │ 2015-01-01 04:00:00 │ 2015-01-01 06:00:00 │ columnar │
│ github_columnar_events │ created_at │ github_columnar_events_p2015_01_01_0600 │ 2015-01-01 06:00:00 │ 2015-01-01 08:00:00 │ heap │
└────────────────────────┴──────────────────┴─────────────────────────────────────────┴─────────────────────┴─────────────────────┴───────────────┘
جدول مجموعة الموقع المشترك
يحتوي الجدول pg_dist_colocation على معلومات عن أجزاء الجداول التي يجب وضعها معًا، أو تجميعها. عندما يكون جدولان في نفس مجموعة colocation، يضمن Azure Cosmos DB ل PostgreSQL وضع الأجزاء ذات قيم عمود التوزيع نفسها على نفس العقد العاملة. يتيح الموقع المشترك تحسينات الانضمام، وبعض القيم المحتسبة الموزعة، بالإضافة إلي دعم المفتاح الخارجي. يتم استنتاج تجميع الأجزاء عندما يتطابق عدد الأجزاء وعوامل النسخ المتماثل وأنواع أعمدة القسم بين جدولين؛ ومع ذلك، يمكن تحديد مجموعة colocation مخصصة عند إنشاء جدول موزع، إذا رغبت في ذلك.
Name | كتابة | الوصف |
---|---|---|
colocationid | العدد الصحيح | المعرّف الفريد لمجموعة الموقع الذي يتوافق معه هذا الصف. |
shardcount | العدد الصحيح | عدد الأجزاء لكافة الجداول الموجودة في مجموعة الموقع المشترك هذه |
replicationfactor | العدد الصحيح | عامل النسخ المتماثل لجميع الجداول في مجموعة الموقع المشترك هذه. |
distributioncolumntype | معرف العنصر | نوع عمود التوزيع لجميع الجداول في مجموعة الموقع المشترك هذه. |
SELECT * from pg_dist_colocation;
colocationid | shardcount | replicationfactor | distributioncolumntype
--------------+------------+-------------------+------------------------
2 | 32 | 2 | 20
(1 row)
جدول إستراتيجية Rebalancer
يحدد هذا الجدول الاستراتيجيات rebalance_table_shards التي يمكن استخدامها من أجل تحديد مكان نقل الأجزاء.
Name | كتابة | الوصف |
---|---|---|
default_strategy | boolean | ما إذا كان يجب على rebalance_table_shards اختيار هذه الإستراتيجية افتراضياً. استخدم citus_set_default_rebalance_strategy لتحديث هذا العمود |
shard_cost_function | regproc | معرف لدالة التكلفة، والتي يجب أن تأخذ معرف الجزء على أنها bigint، وتعيد مفهومها عن التكلفة، كنوع حقيقي |
node_capacity_function | regproc | مُعرّف لوظيفة السعة، والتي يجب أن تأخذ العقدة على أنها int، وتعود مفهومها عن سعة العقدة كنوع حقيقي |
shard_allowed_on_node_function | regproc | يقوم معرف الدالة التي تعطي shardid bigint وnodeidarg int بإرجاع قيمة منطقية لما إذا كان Azure Cosmos DB ل PostgreSQL يمكنه تخزين الجزء على العقدة |
default_threshold | حُر4 | يعد حد اعتبار العقدة ممتلئة جدًا أو فارغة جدًا، والتي تحدد متى يجب أن يحاول rebalance_table_shards نقل الأجزاء |
minimum_threshold | حُر4 | حماية لمنع تعيين وسيطة الحد rebalance_table_shards() علي مستوي منخفض جدًا |
بشكل افتراضي، يتم شحن Cosmos DB ل PostgreSQL مع هذه الاستراتيجيات في الجدول:
SELECT * FROM pg_dist_rebalance_strategy;
-[ RECORD 1 ]-------------------+-----------------------------------
Name | by_shard_count
default_strategy | false
shard_cost_function | citus_shard_cost_1
node_capacity_function | citus_node_capacity_1
shard_allowed_on_node_function | citus_shard_allowed_on_node_true
default_threshold | 0
minimum_threshold | 0
-[ RECORD 2 ]-------------------+-----------------------------------
Name | by_disk_size
default_strategy | true
shard_cost_function | citus_shard_cost_by_disk_size
node_capacity_function | citus_node_capacity_1
shard_allowed_on_node_function | citus_shard_allowed_on_node_true
default_threshold | 0.1
minimum_threshold | 0.01
تعين الاستراتيجية by_disk_size
كل جزء بنفس التكلفة. يتمثل تأثيرها في معادلة عدد الأجزاء خلال العقد. تعين الاستراتيجية الافتراضية، by_disk_size
، تكلفة لكل جزء يطابق حجم القرص الخاص به بالبايت بالإضافة إلى تكلفة الأجزاء التي تم تخصيصها معه. يحسب حجم القرص من خلال استخدام pg_total_relation_size
، حتى يتضمن مؤشرات. تحاول هذه الإستراتيجية تحقيق نفس مساحة القرص على كل عقدة. لاحظ عتبة 0.1
، فإنه يمنع حركة الأجزاء غير الضرورية الناجمة عن اختلافات ضئيلة في مساحة القرص.
إنشاء إستراتيجيات مخصصة لإعادة التوازن
فيما يلي أمثلة على الدالات التي يمكن استخدامها ضمن استراتيجيات إعادة توازن الأجزاء الجديدة، وتسجيلها في pg_dist_rebalance_strategy مع الدالةcitus_add_rebalance_strategy.
تعيين استثناء لسعة العقدة حسب نمط اسم المضيف:
CREATE FUNCTION v2_node_double_capacity(nodeidarg int) RETURNS boolean AS $$ SELECT (CASE WHEN nodename LIKE '%.v2.worker.citusdata.com' THEN 2 ELSE 1 END) FROM pg_dist_node where nodeid = nodeidarg $$ LANGUAGE sql;
إعادة التوازن من خلال عدد الاستعلامات التي تنتقل إلى جزء، كما تم قياسه بواسطة citus_stat_statements:
-- example of shard_cost_function CREATE FUNCTION cost_of_shard_by_number_of_queries(shardid bigint) RETURNS real AS $$ SELECT coalesce(sum(calls)::real, 0.001) as shard_total_queries FROM citus_stat_statements WHERE partition_key is not null AND get_shard_id_for_distribution_column('tab', partition_key) = shardid; $$ LANGUAGE sql;
عزل جزء معين (10000) على عقدة (العنوان '10.0.0.1 '):
-- example of shard_allowed_on_node_function CREATE FUNCTION isolate_shard_10000_on_10_0_0_1(shardid bigint, nodeidarg int) RETURNS boolean AS $$ SELECT (CASE WHEN nodename = '10.0.0.1' THEN shardid = 10000 ELSE shardid != 10000 END) FROM pg_dist_node where nodeid = nodeidarg $$ LANGUAGE sql; -- The next two definitions are recommended in combination with the above function. -- This way the average utilization of nodes is not impacted by the isolated shard. CREATE FUNCTION no_capacity_for_10_0_0_1(nodeidarg int) RETURNS real AS $$ SELECT (CASE WHEN nodename = '10.0.0.1' THEN 0 ELSE 1 END)::real FROM pg_dist_node where nodeid = nodeidarg $$ LANGUAGE sql; CREATE FUNCTION no_cost_for_10000(shardid bigint) RETURNS real AS $$ SELECT (CASE WHEN shardid = 10000 THEN 0 ELSE 1 END)::real $$ LANGUAGE sql;
جدول إحصائيات الاستعلام
يوفر citus_stat_statements
Azure Cosmos DB ل PostgreSQL إحصائيات حول كيفية تنفيذ الاستعلامات، ولمن. إنه مشابه (ويمكن ضمه) لطريقة العرض pg_stat_statements في PostgreSQL، والتي تتعقب الإحصائيات عن سرعة الاستعلام.
يمكن أن تتبع طريقة العرض هذه الاستعلامات إلى المستأجرين الأصليين في تطبيق متعدد المستأجرين، مما يساعد على تحديد متى يتم عزل المستأجر.
Name | كتابة | الوصف |
---|---|---|
queryid | عدد صحيح كبير | المعرف (جيد لضم pg_stat_statements) |
معرف المستخدم | معرف العنصر | المستخدم الذي قام بتشغيل الاستعلام |
dbid | معرف العنصر | مثيل قاعدة البيانات للمنسق |
استعلام | النص | سلسلة استعلام مجهولة المصدر |
executor | النص | مُنفِّذ Citus المستخدم: التكيفي أو في الوقت الحقيقي أو تعقب المهام أو الموجه أو تحديد الإدخال |
partition_key | النص | قيمة عمود التوزيع في الاستعلامات التي ينفذها الموجه، وإلا NULL |
calls | عدد صحيح كبير | عدد المرات التي تم فيها تنفيذ الاستعلام |
-- create and populate distributed table
create table foo ( id int );
select create_distributed_table('foo', 'id');
insert into foo select generate_series(1,100);
-- enable stats
-- pg_stat_statements must be in shared_preload libraries
create extension pg_stat_statements;
select count(*) from foo;
select * from foo where id = 42;
select * from citus_stat_statements;
النتائج:
-[ RECORD 1 ]-+----------------------------------------------
queryid | -909556869173432820
userid | 10
dbid | 13340
query | insert into foo select generate_series($1,$2)
executor | insert-select
partition_key |
calls | 1
-[ RECORD 2 ]-+----------------------------------------------
queryid | 3919808845681956665
userid | 10
dbid | 13340
query | select count(*) from foo;
executor | adaptive
partition_key |
calls | 1
-[ RECORD 3 ]-+----------------------------------------------
queryid | 5351346905785208738
userid | 10
dbid | 13340
query | select * from foo where id = $1
executor | adaptive
partition_key | 42
calls | 1
تحذيرات:
- لا يتم نسخ بيانات الإحصائيات، ولن تنجو من أعطال قاعدة البيانات أو تجاوز الفشل
- يتتبع عدداً محدوداً من الاستعلامات التي تم تعيينها بواسطة
pg_stat_statements.max
GUC (الافتراضي 5000) - لاقتطاع الجدول، استخدم الوظيفة
citus_stat_statements_reset()
نشاط الاستعلام الموزَّع
يوفر Azure Cosmos DB ل PostgreSQL طرق عرض خاصة لمشاهدة الاستعلامات والأقفال في جميع أنحاء المجموعة، بما في ذلك الاستعلامات الخاصة بالأجزاء المستخدمة داخليا لإنشاء نتائج للاستعلامات الموزعة.
- citus_dist_stat_activity: تعرض الاستعلامات الموزَّعة التي يتم تنفيذها على جميع العقد. مجموعة شاملة من
pg_stat_activity
، يمكن استخدامها أينما كان الأخير. - citus_worker_stat_activity: يعرض الاستعلامات عن العمال، بما في ذلك استعلامات التجزئة مقابل الأجزاء الفردية.
- citus_lock_waits: استعلامات محظورة عبر المجموعة.
يشتمل أول عرضين على جميع أعمدة pg_stat_activity بالإضافة إلى مضيف المضيف/المنفذ للعامل الذي بدأ الاستعلام والمضيف/المنفذ لعقدة منسق المجموعة.
على سبيل المثال، ضع في الاعتبار حساب الصفوف في جدول موزع:
-- run from worker on localhost:9701
SELECT count(*) FROM users_table;
يمكننا أن نرى أن الاستعلام يظهر في citus_dist_stat_activity
:
SELECT * FROM citus_dist_stat_activity;
-[ RECORD 1 ]----------+----------------------------------
query_hostname | localhost
query_hostport | 9701
master_query_host_name | localhost
master_query_host_port | 9701
transaction_number | 1
transaction_stamp | 2018-10-05 13:27:20.691907+03
datid | 12630
datname | postgres
pid | 23723
usesysid | 10
usename | citus
application\_name | psql
client\_addr |
client\_hostname |
client\_port | -1
backend\_start | 2018-10-05 13:27:14.419905+03
xact\_start | 2018-10-05 13:27:16.362887+03
query\_start | 2018-10-05 13:27:20.682452+03
state\_change | 2018-10-05 13:27:20.896546+03
wait\_event_type | Client
wait\_event | ClientRead
state | idle in transaction
backend\_xid |
backend\_xmin |
query | SELECT count(*) FROM users_table;
backend\_type | client backend
يتطلب هذا الاستعلام معلومات من جميع القطع. بعض المعلومات موجودة في جزء users_table_102038
، والذي يخزن في localhost:9700
. يمكننا رؤية استعلاما يصل إلى الجزء من خلال النظر إلى citus_worker_stat_activity
طريقة العرض:
SELECT * FROM citus_worker_stat_activity;
-[ RECORD 1 ]----------+-----------------------------------------------------------------------------------------
query_hostname | localhost
query_hostport | 9700
master_query_host_name | localhost
master_query_host_port | 9701
transaction_number | 1
transaction_stamp | 2018-10-05 13:27:20.691907+03
datid | 12630
datname | postgres
pid | 23781
usesysid | 10
usename | citus
application\_name | citus
client\_addr | ::1
client\_hostname |
client\_port | 51773
backend\_start | 2018-10-05 13:27:20.75839+03
xact\_start | 2018-10-05 13:27:20.84112+03
query\_start | 2018-10-05 13:27:20.867446+03
state\_change | 2018-10-05 13:27:20.869889+03
wait\_event_type | Client
wait\_event | ClientRead
state | idle in transaction
backend\_xid |
backend\_xmin |
query | COPY (SELECT count(*) AS count FROM users_table_102038 users_table WHERE true) TO STDOUT
backend\_type | client backend
query
يعرض الحقل البيانات التي تنسخ من الجزء المراد حسابه.
إشعار
إذا كان هناك استعلام عن الموجه (على سبيل المثال، مستأجر واحد في تطبيق متعدد المستأجرين، فاختر
- يتم التنفيذ من جدول tenant_id = X`) بدون كتلة عملية، فإن أعمدة master_query_host_name وmaster_query_host_port ستكون فارغة في citus_worker_stat_activity.
فيما يلي أمثلة على الاستعلامات المفيدة التي يمكنك إنشاؤها باستخدام citus_worker_stat_activity
:
-- active queries' wait events on a certain node
SELECT query, wait_event_type, wait_event
FROM citus_worker_stat_activity
WHERE query_hostname = 'xxxx' and state='active';
-- active queries' top wait events
SELECT wait_event, wait_event_type, count(*)
FROM citus_worker_stat_activity
WHERE state='active'
GROUP BY wait_event, wait_event_type
ORDER BY count(*) desc;
-- total internal connections generated per node by Azure Cosmos DB for PostgreSQL
SELECT query_hostname, count(*)
FROM citus_worker_stat_activity
GROUP BY query_hostname;
-- total internal active connections generated per node by Azure Cosmos DB for PostgreSQL
SELECT query_hostname, count(*)
FROM citus_worker_stat_activity
WHERE state='active'
GROUP BY query_hostname;
تعد طريقة العرض التالية هي citus_lock_waits
. من أجل معرفة كيفية عملها، يمكننا إنشاء حالة تأمين يدويًا. أولًا سنعمل علي إعداد جدول اختبار من المنسق:
CREATE TABLE numbers AS
SELECT i, 0 AS j FROM generate_series(1,10) AS i;
SELECT create_distributed_table('numbers', 'i');
بعد ذلك، باستخدام جلستين على المنسق، يمكننا تشغيل هذا التسلسل من العبارات:
-- session 1 -- session 2
------------------------------------- -------------------------------------
BEGIN;
UPDATE numbers SET j = 2 WHERE i = 1;
BEGIN;
UPDATE numbers SET j = 3 WHERE i = 1;
-- (this blocks)
تظهر طريقة العرض citus_lock_waits
الحالة.
SELECT * FROM citus_lock_waits;
-[ RECORD 1 ]-------------------------+----------------------------------------
waiting_pid | 88624
blocking_pid | 88615
blocked_statement | UPDATE numbers SET j = 3 WHERE i = 1;
current_statement_in_blocking_process | UPDATE numbers SET j = 2 WHERE i = 1;
waiting_node_id | 0
blocking_node_id | 0
waiting_node_name | coordinator_host
blocking_node_name | coordinator_host
waiting_node_port | 5432
blocking_node_port | 5432
في هذا المثال، نشأت الاستعلامات على المنسق، ولكن يمكن أن تسرد طريقة العرض أيضا التأمينات بين الاستعلامات التي تنشأ على العمال (يتم تنفيذها باستخدام Azure Cosmos DB ل PostgreSQL MX على سبيل المثال).
الخطوات التالية
- تعرف على كيفية تغيير بعض وظائف Azure Cosmos DB ل PostgreSQL لجداول النظام
- راجع مفاهيم العقد والجداول