Tüm Ürünler
Search
Belge Merkezi

ApsaraDB RDS:Statement concurrency control

Son Güncelleme:Oct 09, 2026

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


Parametre


Açıklama


ccl_max_waiting_count


Aynı CCL kuralıyla eşleşen ve Concurrency control waiting durumunda bulunabilen maksimum SQL deyimi sayısı. Bu sınır aşıldığında deyimler başarısız olur ve ERROR 7534 (HY000): Concurrency control waiting count exceed max waiting count hatası döndürülür. Varsayılan değer 0'dır; bu değer herhangi bir sınır olmadığını gösterir.


ccl_wait_timeout


Bir SQL deyiminin Concurrency control waiting durumunda bekleyebileceği maksimum süre. Bu sınır aşıldığında SQL deyimi yürütülür ve artık CCL tarafından kısıtlanmaz. Varsayılan değer 86400 saniyedir.

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'


Parametre


Açıklama


Id


CCL kuralının ID'si.


Type


SQL deyiminin türü.


Schema_name


Veritabanı adı.


Table_name


Veritabanındaki tablo adı.


Concurrency_count


Eşzamanlılık sayısı. Bu parametreyi 0 olarak ayarlarsanız kural ile eşleşen tüm SQL deyimleri reddedilir ve ERROR 7535 (HY000): Concurrency control refuse to execute query hatası döndürülür.


Keywords


Anahtar kelime. Birden fazla anahtar kelimeyi noktalı virgül (;) ile ayırın.


State


Kuralın etkin olup olmadığını belirtir.


Ordered


Birden fazla keywords öğesinin sırayla eşleştirilip eşleştirilmeyeceğini belirtir.


Digest

SQL_template temel alınarak hash hesaplaması yapılarak elde edilen 64 baytlık hash dizesi.


SQL_template


SQL deyiminin şablonu.

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');
    Not
    • Table_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');
    Not
    • Her 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);
    Not

    Silmek 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 WAITTING parametreleri 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.