Bu konu, optimize edilmiş bir arabellek havuzu yönetim mekanizması sağlayan daha hızlı DDL özelliğini açıklar. Bu mekanizma, veri tanımlama dili (DDL) işlemlerinin etkisini azaltmanıza ve izin verilen eşzamanlı DDL işlemi sayısını artırmanıza olanak tanır.
Önkoşullar
RDS örneğiniz aşağıdaki MySQL sürümlerinden birini çalıştırıyor olmalıdır:
MySQL 8,0 (20200630 veya sonraki bir küçük motor sürümü ile.)
MySQL 5,7 (20200630 veya sonraki bir küçük motor sürümü ile.)
MySQL 5.6 (20200630 veya sonraki bir küçük motor sürümü ile.)
Arka plan bilgileri
DDL işlemleri RDS örneklerinde yaygındır. RDS örneğinizi kullanırken DDL işlemleriyle ilgili sorunlarla karşılaşabilirsiniz. Örneğin, aşağıdaki sorunlar ortaya çıkabilir:
Dizin eklerken neden bir performans dalgalanması oluşur ve RDS örneğinizdeki okuma ve yazma işlemleri kesintiye uğrar?
Boyutu 1 GB'den küçük olan bir tabloda DDL işlemi yapmak neden 10 dakikadan fazla sürer?
Geçici tablolar oluşturan bir bağlantı kapatıldığında neden bir performans dalgalanması meydana gelir?
ApsaraDB for RDS veritabanı altyapısı ekibi, bu sorunları tespit etmek için derinlemesine analizler yapmış ve yoğun testler gerçekleştirmiştir. Analiz ve test sonuçlarına dayanarak ekip, DDL işlemlerini yönetmek için kullanılan önbellek bakım mantığında hatalar tespit etmiştir. Bu sorunları gidermek amacıyla ekip, daha hızlı DDL özelliğini geliştirmiştir. Bu özellik tarafından sunulan optimize edilmiş arabellek havuzu yönetim mekanizması, DDL işlemleri tarafından tetiklenen kilit rekabetini azaltır. RDS örneğiniz normal bir iş yükü sayısı işlerken, bu durum DDL işlemleri sırasında RDS örneğinizin performansını korumanızı sağlar.
Daha hızlı DDL'yi etkinleştirin
ApsaraDB for RDS konsolunda loose_innodb_rds_faster_ddl parametresini ON olarak ayarlayarak daha hızlı DDL özelliğini etkinleştirebilirsiniz. Daha fazla bilgi için bkz. Örnek parametrelerini değiştirin.
DDL işlemleriyle test
-
Test senaryosu
Aşağıdaki MySQL 8,0 tarafından desteklenen deyimleri yürüterek yerinde algoritmasını kullanarak çevrimiçi DDL işlemleri yapın: CREATE INDEX ve OPTIMIZE TABLE. CREATE INDEX deyimi, tabloyu yeniden oluşturma gereği duymadan bir tabloda dizin oluşturur. OPTIMIZE TABLE deyimi, tabloyu yeniden oluşturma gereği duyarak bir tabloda dizin oluşturur.
İşlem Anında Yerinde Tabloyu yeniden oluşturur Eşzamanlı DML işlemlerine izin verir Yalnızca meta verileri değiştirir CREATE INDEX Hayır Evet Hayır Evet Hayır OPTIMIZE TABLE Hayır Evet Evet Evet Hayır -
Test örneği
Test için kullanılan RDS örneği MySQL 8,0 çalıştırır. 8 CPU çekirdeği ve 64 GB bellek sağlar. DDL işlemlerini yaptığınız tablonun boyutu 600 MB'tır.
-
Test prosedürü
Stres testi yapmak için SysBench kullanın. Bu testte, çevrimiçi DDL işlemleri yapın ve işlem sonuçlarını karşılaştırın.
-
Test sonucu
İşlem Ortalama yürütme süresi (daha hızlı DDL devre dışı bırakıldığında) Ortalama yürütme süresi (daha hızlı DDL etkinleştirildiğinde) Performans artış katı CREATE INDEX 56 saniye 4,9 saniye 11,4 OPTIMIZE TABLE 220 saniye 17 saniye 12,9 -
Test özeti
Daha hızlı DDL özelliği, AliSQL içeren ApsaraDB RDS for MySQL'in, MySQL Community Edition'a kıyasla bir DDL işleminin yürütme süresini %90'dan fazla azaltmasını sağlar.
Geçici tablolarla test
Geçici tablolar MySQL'de yaygındır. Örneğin, sistem information_schema veritabanından tabloları sorgulamak veya karmaşık SQL deyimlerinin yürütülmesini hızlandırmak için kullanılan geçici tablolar oluşturur. Bir iş parçacığı çıktığında, ilgili tüm geçici tablolar silinir. Bu, RDS örneğinizde bir performans dalgalanmasına neden olan belirli bir DDL işlemi türü olarak bilinir. Daha fazla bilgi için bkz. Temp ibt tablespace truncation at disconnection stuck InnoDB under large BP.
-
Test örneği
Test için kullanılan RDS örneği MySQL 8,0 çalıştırır. 8 CPU çekirdeği ve 64 GB bellek sağlar.
-
Test prosedürü
Stres testi yapmak için tpcc-mysql kullanın. Bu testte, arabellek havuzunun neredeyse tam kapasiteye ulaşmasını sağlamak için sorguları çalıştırın. Ardından, geçici tablolar oluşturmak için kısa ömürlü bağlantılar üzerinden tek iş parçacıklı istekler başlatın.
-
Test sonucu
Karşılaştırma öğesi DDL işlemleri dahil değil Daha hızlı DDL etkin Daha hızlı DDL devre dışı Saniye başına işlem sayısı (TPS) 42.000 40.000 < 10.000 Aşağıdaki şekil, stres testinden elde edilen saniyelik performans verilerini göstermektedir. Kırmızıyla vurgulanan kısımlar, daha hızlı DDL özelliği devre dışı bırakıldığında RDS örneği tarafından desteklenen TPS değerlerini gösterir.

-
Test özeti
Geçici tablolar oluşturan her bir iş parçacığı çıktığında, yerel MySQL ciddi bir performans dalgalanmasına neden olur. Dalgalanma, TPS'i %70'ten fazla düşürür. Daha hızlı DDL özelliği etkinleştirildikten sonra, TPS düşüşü %5'e iner.
Optimizasyon etkisi
Daha hızlı DDL özelliği MySQL 5,6, 5,7 ve 8,0'ı destekler. Ancak, desteklenen DDL işlemleri seçilen MySQL sürümüne göre değişebilir.
| Kategori | DDL işlemi | MySQL 5,6 | MySQL 5,7 | MySQL 8,0 |
| Yerinde DDL | Daha fazla bilgi için bkz. MySQL 8,0 Çevrimiçi DDL İşlemleri ve MySQL 5,7 Çevrimiçi DDL İşlemleri. | Hayır | Evet | Evet |
| Tablespace yönetimi | Tablespace şifrelemesini etkinleştirir veya devre dışı bırakır. | Hayır | Evet | Evet |
| Bir tablespace'i serbest bırakır veya siler. | Hayır | Evet | Evet | |
| Bir tablespace'i iptal eder. | Evet | Evet | Evet | |
| Tablo silme | Bir tabloyu serbest bırakır veya siler. | Evet | Evet | Evet |
| Geri alma işlemi | Bir undo tablespace'i serbest bırakır veya siler. | Hayır | Hayır | Evet |
| Tablo yenileme | Bir tabloyu ve kirli sayfalarını yeniler. | Evet | Evet | Evet |
Daha hızlı DDL tarafından düzeltilen hatalar
Daha hızlı DDL özelliği aşağıdaki hataları düzeltir: