Alibaba Cloud, beklenmeyen istek trafiği, kaynak tüketen deyimler ve SQL erişim modeli değişiklikleri durumunda ApsaraDB RDS for MySQL örneklerinin kararlılığını sağlamak için eşzamanlılık denetimi (CCL) özelliğini ve DBMS_CCL paketini sunar. CCL özelliği sözdizimi kurallarına dayanır. DBMS_CCL paketini kullanarak belirli türdeki SQL deyimlerinin eşzamanlı çalıştırılabileceği maksimum sayıyı sınırlayabilirsiniz. Eşzamanlı çalışan SQL deyimi sayısı üst sınıra ulaştığında, ek SQL deyimleri sayı üst sınırın altına inene kadar bekleme durumuna geçer.
Önkoşullar
RDS örneği aşağıdaki MySQL sürümlerinden birini çalıştırıyor olmalıdır:
MySQL 8.4
Küçük motor sürümü 20190816 veya üzeri olan MySQL 8.0
Küçük motor sürümü 20200630 veya üzeri olan MySQL 5.7
Parametreler
|
|
|
|
|
|
|
|
|
Kullanım notları
CCL işlemleri günlük oluşturmadığından yalnızca mevcut RDS örneğini etkiler. Örneğin, birincil RDS örneğinde yapılan CCL işlemleri ikincil RDS örneğine, salt okunur RDS örneğine veya olağanüstü durum kurtarma RDS örneğine senkronize edilmez.
CCL, DML deyimlerinden kaynaklanan işlem kilitlenmelerini çözmek için bir zaman aşımı mekanizması sağlar. Bekleyen iş parçacıkları ayrıca işlem zaman aşımına ve iş parçacığı sonlandırmasına yanıt vererek kilitlenmeleri önler.
Özellik açıklaması
CCL aşağıdaki boyutlara dayalı özellikler sunar:
SQL komutu: SELECT, UPDATE, INSERT veya DELETE gibi bir SQL komutunun türü.
Nesne: Bir SQL komutunun çalıştırıldığı nesne, örneğin bir TABLE veya VIEW.
Anahtar kelimeler: Bir SQL komutu içindeki anahtar kelimeler.
Şablon: Bir SQL komutunun şablonu.
CCL tablosu oluşturun
AliSQL, CCL kurallarını depolamak için concurrency_control adlı bir sistem tablosu kullanır. Sistem başlatıldığında tablo otomatik olarak oluşturulur. Tabloyu oluşturmak için aşağıdaki deyimleri çalıştırın:
CREATE TABLE `concurrency_control` (
`Id` bigint NOT NULL AUTO_INCREMENT,
`Type` enum('SELECT','UPDATE','INSERT','DELETE','TEMPLATE') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'SELECT',
`Schema_name` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL,
`Table_name` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL,
`Concurrency_count` bigint NOT NULL,
`Keywords` text COLLATE utf8mb3_bin,
`State` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'Y',
`Ordered` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
`Digest` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL,
`SQL_template` longtext COLLATE utf8mb3_bin,
PRIMARY KEY (`Id`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin STATS_PERSISTENT=0 COMMENT='Concurrency control'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SQL_template temel alınarak hash hesaplaması yapılarak elde edilen 64 baytlık hash dizesi. |
|
|
|
CCL kurallarını yönetin
AliSQL, DBMS_CCL paketinde dört yönetim arayüzü sunar. Aşağıdaki listede bu arayüzler açıklanmaktadır:
add_ccl_rule: Kural ekleyin
-
Sözdizimi
dbms_ccl.add_ccl_rule('<Type>','<Schema_name>','<Table_name>',<Concurrency_count>,'<Keywords>');
-
Örnekler
-
Tüm SELECT deyimleri için eşzamanlılık sayısını 10 olarak ayarlayın.
mysql> call dbms_ccl.add_ccl_rule('SELECT', '', '', 10, ''); -
key1 anahtar kelimesini içeren SELECT deyimleri için eşzamanlılık sayısını 20 olarak ayarlayın.
mysql> call dbms_ccl.add_ccl_rule('SELECT', '', '', 20, 'key1'); -
test.t tablosunda çalışan ve key2 anahtar kelimesini içeren SELECT deyimleri için eşzamanlılık sayısını 20 olarak ayarlayın.
mysql> call dbms_ccl.add_ccl_rule('SELECT', 'test', 't', 20, 'key2');
-
add_ccl_template_rule: Şablon kuralı ekleyin
-
Önkoşullar
Bir şablon kuralı eklemek için örneğiniz aşağıdaki sürümlerden birini çalıştırıyor olmalıdır:
MySQL 8.4
Küçük motor sürümü 20230630 veya üzeri olan MySQL 8.0
Küçük motor sürümü 20241231 veya üzeri olan MySQL 5.7
-
Sözdizimi
dbms_ccl.add_ccl_rule('<Type>','<Schema_name>','<Table_name>',<Concurrency_count>,'', 'Template_sql');NotTable_name parametresini belirtmeniz gerekmez. Template_sql parametresi için bir SQL deyimi belirtmeniz gerekir.
SQL deyimine karşılık gelen SQL şablonunu görüntülemek için STATEMENT_DIGEST_TEXT yerleşik işlevini kullanabilirsiniz.
-
Örnek
test veritabanında
'SELECT c FROM t1 WHERE id=?'şablonuyla eşleşen SQL deyimleri için eşzamanlılık sayısını 30 olarak ayarlayın.call dbms_ccl.add_ccl_rule('TEMPLATE', 'test', '', 30, '', 'SELECT c FROM t1 WHERE id=4');NotHer SQL deyimi yalnızca bir kural ile eşleşebilir.
Farklı türdeki kurallar azalan sırada listelenir: şablon kuralı, tam kural, anahtar kelime kuralı, SQL deyimi kuralı. Her kural kümesi, bir kuralın eşleşip eşleşmediğini belirlemek için sırayla kontrol edilir.
del_ccl_rule: Kural silin
-
Sözdizimi
dbms_ccl.del_ccl_rule(<Id>);
-
Örnek
ID'si 15 olan CCL kuralını silin.
mysql> call dbms_ccl.del_ccl_rule(15);NotSilmek istediğiniz kural yoksa sistem bir uyarı bildirir. Uyarı ayrıntılarını görüntülemek için
show warnings;komutunu çalıştırabilirsiniz.mysql> call dbms_ccl.del_ccl_rule(100); Query OK, 0 rows affected, 2 warnings (0.00 sec) mysql> show warnings; +---------+------+----------------------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------------------+ | Warning | 7514 | Concurrency control rule 100 is not found in table | | Warning | 7514 | Concurrency control rule 100 is not found in cache | +---------+------+----------------------------------------------------+
show_ccl_rule: Etkin kuralları görüntüleyin
-
Sözdizimi
dbms_ccl.show_ccl_rule();
-
Örnek
mysql> call dbms_ccl.show_ccl_rule(); +------+--------+--------+-------+-------+-------+-------------------+---------+---------+----------+----------+ | ID | TYPE | SCHEMA | TABLE | STATE | ORDER | CONCURRENCY_COUNT | MATCHED | RUNNING | WAITTING | KEYWORDS | +------+--------+--------+-------+-------+-------+-------------------+---------+---------+----------+----------+ | 17 | SELECT | test | t | Y | N | 30 | 0 | 0 | 0 | | | 16 | SELECT | | | Y | N | 20 | 0 | 0 | 0 | key1 | | 18 | SELECT | | | Y | N | 10 | 0 | 0 | 0 | | +------+--------+--------+-------+-------+-------+-------------------+---------+---------+----------+----------+Aşağıdaki tabloda MATCHED, RUNNING ve
WAITTINGparametreleri açıklanmıştır.
Parametre
Açıklama
MATCHED
Kuralın eşleşme sayısı.
RUNNING
Kural altında eşzamanlı olarak çalışan iş parçacığı sayısı.
WAITTING
Kural altındaki bekleyen iş parçacığı sayısı.
flush_ccl_rule: Kuralları uygulayın
-
Sözdizimi
concurrency_control tablosundaki kuralları doğrudan değiştirirseniz değişiklikler hemen etkili olmaz. Kuralları uygulamak için aşağıdaki komutu çalıştırmanız gerekir:
dbms_ccl.flush_ccl_rule();
-
Örnek
mysql> update mysql.concurrency_control set CONCURRENCY_COUNT = 15 where Id = 18; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> call dbms_ccl.flush_ccl_rule(); Query OK, 0 rows affected (0.00 sec)
Özellik testi
-
Test betiği
Üç boyut için kurallar oluşturmak üzere aşağıdaki deyimleri çalıştırın.
-- Create a rule for which the number of concurrent SELECT statements with the sbtest1 keyword is 3. call dbms_ccl.add_ccl_rule('SELECT', 'test', 'sbtest1', 3, ''); -- Create a rule for which the number of concurrent SELECT statements with the sbtest2 keyword is 2. call dbms_ccl.add_ccl_rule('SELECT', '', '', 2, 'sbtest2'); -- Create a rule for which the number of concurrent SELECT statements is 2. call dbms_ccl.add_ccl_rule('SELECT', '', '', 2, ''); -
Test senaryosu
Aşağıdaki senaryolarda test için sysbench kullanın:
64 iş parçacığı
4 tablo
select.lua
-
Test sonuçları
Kurallar altındaki eşzamanlı iş parçacığı sayısını sorgulamak için aşağıdaki deyimi çalıştırın:
mysql> call dbms_ccl.show_ccl_rule(); +------+--------+--------+---------+-------+-------+-------------------+---------+---------+----------+----------+ | ID | TYPE | SCHEMA | TABLE | STATE | ORDER | CONCURRENCY_COUNT | MATCHED | RUNNING | WAITTING | KEYWORDS | +------+--------+--------+---------+-------+-------+-------------------+---------+---------+----------+----------+ | 20 | SELECT | test | sbtest1 | Y | N | 3 | 389 | 3 | 9 | | | 21 | SELECT | | | Y | N | 2 | 375 | 2 | 14 | sbtest2 | | 22 | SELECT | | | Y | N | 2 | 519 | 2 | 34 | | +------+--------+--------+---------+-------+-------+-------------------+---------+---------+----------+----------+ 3 rows in set (0.00 sec)RUNNING sütununda görüntülenen sayılar, kuralları oluştururken belirttiğiniz sayılarla aynıdır.