PolarDB for MySQL için en iyi performansı elde etmek amacıyla, PolarDB iş parçacıklarını oturumlardan ayıran iş parçacığı havuzu özelliğini sunar. Aynı anda çok sayıda oturum açıkken, yalnızca küçük bir iş parçacığı grubu etkin oturumların görevlerini yönetir.
Avantajlar
MySQL varsayılan olarak her oturum için özel bir iş parçacığı oluşturan özel oturum modunu kullanır. Çok sayıda oturum bulunduğunda, yoğun kaynak rekabeti performansı düşürür. Kapsamlı sistem iş parçacığı zamanlaması ve önbellek isabetlerinin azalması da performansın keskin şekilde düşmesine neden olur.
PolarDB'nin iş parçacığı havuzu, farklı SQL işlem türleri için öncelik ve eşzamanlılık kontrol mekanizmaları uygular. Bağlantı sayısını optimum seviyeye yakın tutarak, PolarDB veritabanlarının yüksek bağlantı sayısı ve yüksek eşzamanlılık altında yüksek performansı korumasını sağlar. İş parçacığı havuzu aşağıdaki avantajları sunar:
Çok sayıda iş parçacığı eşzamanlı çalıştığında, iş parçacığı havuzu eşzamanlı iş parçacığı sayısını makul bir aralıkta tutarak aşırı iş parçacığı zamanlamasını ve önbellek isabet kayıplarını önler.
Çok sayıda işlem eşzamanlı yürütüldüğünde, iş parçacığı havuzu deyimleri ve işlemleri farklı önceliklere atar; bunların eşzamanlılığını ayrı ayrı kontrol ederek kaynak rekabetini azaltır.
İş parçacığı havuzu, yönetim SQL deyimlerine daha yüksek öncelik verir; böylece bu deyimler ilk sırada çalıştırılır. Bu sayede sistem yükü yüksek olduğunda bile yeni bağlantılar, yönetim işlemleri ve izleme kararlı kalır.
İş parçacığı havuzu, karmaşık sorgu SQL deyimlerine nispeten daha düşük öncelik verir ve bunların maksimum eşzamanlılığını sınırlar. Bu durum, çok sayıda karmaşık SQL deyiminin sistem kaynaklarını tüketerek tüm veritabanı hizmetini kullanılamaz hale getirmesini engeller.
İş parçacığı havuzunu kullanma
İş parçacığı havuzu özelliği, konsolda değiştirebileceğiniz aşağıdaki parametreleri içerir. Daha fazla bilgi için bkz. Küme parametrelerini ve düğüm parametrelerini ayarlama.
PolarDB konsolundaki küme parametreleri, MySQL yapılandırma dosyası uyumluluk ön eki olan loose_ ifadesini taşır. PolarDB konsolunda parametreleri değiştirmek için loose_ ön ekine sahip parametreleri düzenleyin.
Parametre | Açıklama |
loose_thread_pool_enabled | İş parçacığı havuzunun etkinleştirilip etkinleştirilmeyeceğini belirtir. Geçerli değerler:
Not
|
loose_thread_pool_size | İş parçacığı havuzundaki iş parçacığı gruplarının sayısı. Değer aralığı, kümenin birincil düğüm teknik özelliklerindeki CPU çekirdek sayısına bağlıdır. Değer aralığı: DBNodeClassCPU~DBNodeClassCPU10. Varsayılan değer: DBNodeClassCPU2. Not
Örnekler:
|
loose_thread_pool_high_prio_mode | İş parçacığı havuzunun yüksek öncelikli kuyruk modu. Geçerli değerler:
Not Uygulandığı sürümler:
|
loose_thread_pool_high_prio_tickets | Yüksek öncelikli kuyruk için tek seferde verilen bilet sayısı. Değer aralığı: 0~4294967295. Varsayılan değer: 4294967295. Not Uygulandığı sürümler:
|
loose_thread_pool_idle_timeout | İş parçacığı havuzundaki boşta kalan iş parçacıklarının serbest bırakılması için zaman eşiği. Bu eşiği aşan ve hiçbir isteğe hizmet etmeyen boşta iş parçacığı serbest bırakılır. Değer aralığı: 0~31536000. Varsayılan değer: 60. Birim: saniye. Not Uygulandığı sürümler:
|
loose_thread_pool_oversubscribe | Her iş parçacığı grubunda izin verilen etkin iş parçacığı sayısı. Etkin iş parçacığı, bir SQL deyimi yürüten iş parçacığıdır. Değer aralığı: 1~1000. Varsayılan değer: 20. |
loose_thread_pool_stall_limit | İş parçacığı havuzunun takılı duruma girip girmediğini belirlemek için kullanılan zaman eşiği. İş parçacığı havuzu takılı duruma girdiğinde, sistem SQL deyimlerine hizmet etmek için yeni iş parçacıkları oluşturur. Değer aralığı: 1~18446744073709551615. Varsayılan değer: 10. Birim: milisaniye. Not MySQL 5.6 için varsayılan değer 30 milisaniyedir. |
loose_bypass_thread_pool_ips | İş parçacığı havuzu tarafından kısıtlanmayan istemci IP adreslerini yapılandırır. İş parçacığı havuzu dolu olsa bile, yönetim işlemlerini gerçekleştirmek için SQL deyimleri çalıştırılabilir. Yapılandırma örneği: Not Uygulandığı sürüm: Revizyonu 8.0.1.1.19 veya üzeri olan MySQL 8.0.1 8.0.1. |
loose_bypass_thread_pool_check_ignore_proxy |
Not Uygulandığı sürüm: Revizyonu 8.0.1.1.19 veya üzeri olan MySQL 8.0.1. |
loose_thread_pool_high_priority_users | Yüksek öncelikli veritabanı hesaplarını yapılandırır. Yapılandırmadan sonra, bu hesaplardan gelen istekler iş parçacığı havuzunun yüksek öncelikli kuyruğuna yerleştirilir ve ilk sırada işlenir. Yapılandırma örneği: Not
|
loose_thread_pool_mark_ddl_thread_timeout_sec | DDL deyimleri için iş parçacığı havuzu zaman aşımı eşiğini yapılandırır. Bu eşik aşıldığında, DDL zaman aşımına uğramış olarak işaretlenir ve sistem istekleri işlemek için yeni iş parçacıkları oluşturur. Değer aralığı: 0~864000. Varsayılan değer: 600. Birim: saniye. Not Uygulandığı sürüm: Revizyonu 8.0.1.1.19 veya üzeri olan MySQL 8.0.1. |
loose_thread_pool_mark_ddl_thread_timeout_immediately | İş parçacığı havuzu yüksek yük altındayken ve düşük öncelikli kuyruk birikmişken DDL'nin derhal zaman aşımına uğramış olarak işaretlenip işaretlenmeyeceğini belirtir. Sistem ardından istekleri işlemek için yeni iş parçacıkları oluşturur. Bu parametre, sık toplu DDL işlemleri gerektiren iş yükleri için uygundur. Geçerli değerler:
Not Uygulandığı sürüm: Revizyonu 8.0.1.1.19 veya üzeri olan MySQL 8.0.1. |
İş parçacığı havuzu durumunu sorgulama
İş parçacığı havuzu durumunu sorgulamak için aşağıdaki komutu çalıştırın:
select * from information_schema.THREAD_POOL_STATUS;
Aşağıdaki örnek çıktı döndürülür:
mysql> select * from information_schema.THREAD_POOL_STATUS;
+----+--------------+---------------------+----------------------+-------------------+---------------------------+------------------+-----------------+------------------+
| ID | THREAD_COUNT | ACTIVE_THREAD_COUNT | WAITING_THREAD_COUNT | DUMP_THREAD_COUNT | SLOW_THREAD_TIMEOUT_COUNT | CONNECTION_COUNT | LOW_QUEUE_COUNT | HIGH_QUEUE_COUNT |
+----+--------------+---------------------+----------------------+-------------------+---------------------------+------------------+-----------------+------------------+
| 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 3 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 4 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 5 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 6 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 7 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 8 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 9 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 10 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 11 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 12 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 13 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 14 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 15 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 16 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 17 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 18 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 19 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 20 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 21 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 22 | 2 | 1 | 0 | 0 | 0 | 1 | 0 | 0 |
| 23 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 24 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 25 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 26 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 27 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 28 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 29 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 30 | 2 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 31 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 32 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 33 | 2 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 34 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 35 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 36 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 37 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 38 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 39 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 40 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 41 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 42 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 43 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 44 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 45 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 46 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 47 | 3 | 1 | 0 | 0 | 0 | 1 | 0 | 0 |
| 48 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 49 | 3 | 1 | 0 | 0 | 0 | 1 | 0 | 0 |
| 50 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 51 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 52 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 53 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 54 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 55 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 56 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 57 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 58 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 59 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 60 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 61 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 62 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 63 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+----+--------------+---------------------+----------------------+-------------------+---------------------------+------------------+-----------------+------------------+
64 rows in set (0.00 sec)
Aşağıdaki tabloda parametreler açıklanmaktadır.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Sysbench testleri
Aşağıdaki şekiller, iş parçacığı havuzu etkinleştirildiğinde ve devre dışı bırakıldığında performansı karşılaştırır. Test sonuçları, iş parçacığı havuzunun yüksek eşzamanlılık altında belirgin performans avantajları sağladığını göstermektedir.
Şekil 1. OLTP dizinsiz güncelleme testi 
Şekil 2. OLTP yalnızca yazma testi 
Şekil 3. OLTP yalnızca okuma testi 
Şekil 4. OLTP okuma/yazma testi 
Dolu bir iş parçacığı havuzunda sorun giderme
Veritabanında bağlantı zaman aşımları veya kuyruğa alınmış istekler yaşıyorsanız, iş parçacığı havuzunun dolup dolmadığını kontrol edin.
PolarDB konsolunda oturum açın ve hedef kümenin ayrıntılar sayfasına gidin.
seçeneğine tıklayın.
thread_pool_running_threads(çalışan iş parçacıklarının mevcut sayısı) iletp_thread_count(iş parçacığı havuzunun toplam iş parçacığı kapasitesi) değerlerini karşılaştırın.thread_pool_running_threadsdeğeritp_thread_countdeğerine yakın kalıyorsa, iş parçacığı havuzu doludur.tp_low_queue_countvetp_high_queue_countölçümlerini kontrol edin. Herhangi bir kuyrukta birikme olması, isteklerin kuyruğa alındığını ve iş parçacığı havuzunun dolu olduğunu gösterir.