MySQL InnoDB page_cleaner ayarları uygun olmayabilir


17

Mysqld.log dosyasında bu notu görme:

[Note] InnoDB: page_cleaner: 1000ms intended loop took 15888ms. The settings might not be optimal. (flushed=200 and evicted=0, during the time.)

Burada böyle bir şeyden söz ediliyor: MySQL örneği "SYNC indeksi yapıyor"

Sorum şu: eğer bu not günlüklerde görüldüğünde, varsa, hangi işlem yapılmalıdır?

MySQL ve OS sürümleri:
mysql-community- server- 5.7.9 -1.el7.x86_64
centos-release-7-1.1503.el7.centos.2.8.x86_64

Koşu GÖSTER DEĞİŞKENLER '% innodb' GİBİ; önerildiği gibi:

innodb_page_cleaners | 1

Yanıtlar:


11

İnnodb_page_cleaners varsayılan değeri MySQL 5.7.8'de 1'den 4'e değiştirildi. Sayfa temizleyici iş parçacığı arabellek havuzu örneklerinin sayısını aşarsa, innodb_page_cleaners otomatik olarak innodb_buffer_pool_instances ile aynı değere ayarlanır

İnnodb_buffer_pool_instances ile şunları kontrol edin:

mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_instances'

Yalnızca innodb_page_cleanersen yüksek değere ayarlayabilirsiniz innodb_buffer_pool_instances. İsterseniz innodb_page_cleaners=4o zaman da ihtiyacınız var innodb_buffer_pool_instances=4.


2
iyi hem innodb_buffer_pool_instances hem de innodb_page_cleaners 8 olarak ayarlanmış ve bazen uyarı görüyorum. Onun optimize masa ve benzeri gibi ağır i / o ops sırasında sadece çizgili masaüstü sınıf dönen diskler bir grup, sanırım sadece mysql disklerin çok yavaş olduğunu söylemek ince yolu;)
Aleksandar Ivanisevic

5

Aynı sorunu çeşitli istemcilerde yaşadık ve sorunun, innodb_lru_scan_depth değerinin varsayılan değer olan 1024'ten 128'e ayarlanmasından kaynaklandığını öğrendik . Değeri çok düşük ayarlanması, arabellek havuzunun bazı arabelleklerini ve arabellek havuzu kirli sayfalarını temizlemeye devam edemeyeceğini düşünüyoruz.

Bizim durumumuzda, değeri 128'den 256'ya çıkararak ciddi bir iyileşme gördük, ancak genellikle doğru değer donanıma ve yük türüne bağlıdır. Hüner OLTP performansını artırmak ve MySQL böylece almamayı temiz tampon havuzu tutmak icar arasında doğru değerini bulmaktır page_cleaner yukarıdaki mesajı (belirttiği gibi, bir sürü iş yapmak gerek "InnoDB'nin: page_cleaner: 1000ms döngü amaçlanan 15888ms aldı " ).

Değer, MySQL yeniden başlatılmadan dinamik olarak değiştirilebilir, ör.

SET GLOBAL innodb_lru_scan_depth=256;

1
MySQL'i yeniden başlatırsam innodb_lru_scan_depth 1024'e geri döner, böylece kalıcı olarak nasıl değiştirilir?
Karim Samir

Ekle @KarimSamir innodb_lru_scan_depth = 256senin içinde bir yerlerde my.cnfyük yolu.
Quentin Skousen

0

Bu StackOverflow iş parçacığı yararlı olabilir ...

/programming/41134785/how-to-solve-mysql-warning-innodb-page-cleaner-1000ms-intended-loop-took-xxx

Bu temelde, DB'niz çok fazla yazma alıyor BufferPool kirli değerleri doldurmak neden oluyor . Bu, PageCleaner'ı kirli sayfaları işlemesini ve temizlemesini tetikler . Normalden çok fazla kirli sayfa olduğundan, PageCleaner'ın arabelleği temizlemesi daha fazla zaman aldı .

innodb_lru_scan_depthbelirli değişken temizleme için tampon havuzu taramasının ne kadarının yapılması gerektiğini kontrol eder. Bu ya büyük bir değer olabilir ya da sistemin yazma kapasitesi gerçekten yüksektir, bu da çok sayıda kirli sayfaya neden olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.