INNODB arabellek havuzu istatistiklerini anlama


20

Bu sayfayı mysql belgelerinde okuduktan sonra, mevcut InnoDB kullanımımızı anlamaya çalıştım. Şu anda arabellek havuzu için 6GB RAM ayırıyoruz. Veritabanı boyutumuz hemen hemen aynı. İşte çıktı show engine innodb status\G(v5.5 çalıştırıyoruz)

----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 6593445888; in additional pool allocated 0
Dictionary memory allocated 1758417
Buffer pool size   393215
Free buffers       853
Database pages     360515
Old database pages 133060
Modified db pages  300
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 7365790, not young 23099457
0.00 youngs/s, 0.00 non-youngs/s
Pages read 1094342, created 185628, written 543182148
0.00 reads/s, 0.00 creates/s, 37.32 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 360515, unzip_LRU len: 0
I/O sum[2571]:cur[0], unzip sum[0]:cur[0]

Arabellek önbelleğini ne kadar iyi kullandığımızı bilmek istedim. Başlangıçta çıktıya baktıktan sonra, aslında onu kullandığımız, bunlara dayanarak Pages made youngve not youngiçinde rakamlara Buffer pool hit rate is 1000 / 10000sahip olduğumuz ve (web üzerinde başka bir yerde bunun oldukça yoğun kullanıldığı anlamına geldiğini gördüm.

Beni bir döngüye sokan şey, neden young-making rateve 0/ not1000'de ve young/sve non-young/serişimlerin her ikisinin de 0'da olduğu.

Herkes bunu anlamasına yardımcı olabilir mi?

Yanıtlar:


18
 Buffer pool hit rate is 1000 / 1000

Bu, bulunduğunuz durumda gerçekten anlamlı olan tek değerdir ... ve bu durum, mükemmel bir% 100 isabet oranına sahip bir tampon havuzuna sahip olacak kadar şanslı olduğunuzdur. Geri kalanını fazla analiz etmeyin, çünkü sunucu işletim sistemi belleği yetersiz olduğu ve değiştirilmesine neden olmadıkça değiştirmeniz gereken hiçbir şey yoktur.

Arabellek havuzunda sıfır basınç olduğu durumda, genç / genç olmayan değerler ilginç değildir. InnoDB kullanıyor, onsuz hiçbir şey yapmıyor. Havuz çok küçükse, sayfalar çıkarılır ve yeni sayfalar okunur ve diğer istatistikler bunu anlamanıza yardımcı olur ... ancak sorun bu gibi görünmüyor.

Havuzdaki ücretsiz "kullanılmayan" alan, herhangi bir nedenle gerekliyse InnoDB tarafından asla ihmal edilmeyecek veya boşta bırakılmayacaktır, bu yüzden ücretsiz olması, yalnızca çalışmanızın boyutu olarak genişleyecek bazı nefes alanınız olduğu anlamına gelir. veri kümesi büyür.

Tabii ki, yakın zamanda sunucuyu yeniden başlatmadıkça, bu tamamlanmamıştır, bu durumda tamamlanmamıştır. İstatistikler tüm hikayeyi anlatmadan önce sunucunun tam bir "normal" kullanım (tam yedeklemeler dahil) boyunca çalışması gerekir. ... bunun bir saat, bir gün, hafta, ay veya yıl olup olmadığı, uygulamanıza bağlıdır.


28

The Buffer pool size 393215 Bu bayt değil sayfalarda.

GB'de Arabellek Havuzu boyutunu görmek için şunu çalıştırın:

SELECT FORMAT(BufferPoolPages*PageSize/POWER(1024,3),2) BufferPoolDataGB FROM
(SELECT variable_value BufferPoolPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

Database pages 360515 Bu, Tampon Havuzunda veri bulunan sayfa sayısıdır

GB'de Arabellek Havuzu boyutundaki veri miktarını görmek için şunu çalıştırın:

SELECT FORMAT(BufferPoolPages*PageSize/POWER(1024,3),2) BufferPoolDataGB FROM
(SELECT variable_value BufferPoolPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_data') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

Kullanılan Tampon Havuzunun yüzdesini görmek için şunu çalıştırın:

SELECT CONCAT(FORMAT(DataPages*100.0/TotalPages,2),' %') BufferPoolDataPercentage FROM
(SELECT variable_value DataPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_data') A,
(SELECT variable_value TotalPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') B;

Modified db pages 300Bu, Tampon Havuzunda veritabanına geri yazılması gereken sayfa sayısıdır. Bunlara kirli sayfalar da denir.

Kirli Sayfalar Tarafından Alınan Alanı görmek için şunu çalıştırın:

SELECT FORMAT(DirtyPages*PageSize/POWER(1024,3),2) BufferPoolDirtyGB FROM
(SELECT variable_value DirtyPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_dirty') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

Kirli Sayfaların Yüzdesini görmek için şunu çalıştırın:

SELECT CONCAT(FORMAT(DirtyPages*100.0/TotalPages,2),' %') BufferPoolDirtyPercentage FROM
(SELECT variable_value DirtyPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_dirty') A,
(SELECT variable_value TotalPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') B;

Ekrandaki diğer şeylere gelince, şunu çalıştırın:

SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool%';

Arabellek Havuzu için tüm durum değişkenlerini göreceksiniz. incelemek istediğiniz her şeye karşı aynı sorguları uygulayabilirsiniz.


Teşekkür ederim! Bundan dolayı, tampon önbelleğimizin gerçekten kullanıldığını topluyorum, ama bilmek istediğim, ETKİLİ olarak kullanıyorsak. Genç ve eski sayfaların kavramını anlarsam, tahmin ediyorum ki tampon önbelleğin sonuna kadar kullanıldığına dair iyi bir gösterge, genç yapılan sayfaların sayısı ve genç sayfalara erişim, doğru mu? 3 saatte bir yedekleme yapmak için mysqldump kullanıyoruz, bu da neden dolu olduğunu açıklıyor. Ama young-making rate 0 / 1000ve ile 0.00 youngs/s, bu bize gerçekten kullanmadığımızı söyler. Bunu doğru mu okuyorum?
Safado

2
0 / 1000'in genç yapma oranı, çalıştırdığınız sorguların veri sayfalarının yalnızca önbelleğe sığmadığını, aynı zamanda genç önbelleğin daha küçük (3/8) boyutuna sığdığını söyler. Diğer bir deyişle, sorgular bazı sayfaları genç olmayan büyük önbellekte yaşlandırmak için yeterli veri kullanmıyor.
Thomas Jones-Low

Kalan innodb_buffer_pool durum değişkenleri hakkında kısa bir açıklama çok faydalı olacaktır. Lütfen cevabınıza ekler misiniz
vidyadhar

5

"Mükemmel% 100 isabet oranına sahip bir tampon havuzuna sahip olacak kadar şanslısın" değerlendirmesine katılmayacağım.

Çıktının üstünde (kesilmiş olan), aşağıdaki gibi bir çizgi vardır:

Per second averages calculated from the last 16 seconds

Bu bana son 16 saniyede hiçbir okuma gerçekleşmediğini söylüyor , böylece (yapay olarak) size mükemmel bir '1000/1000' puanı veriyor.

0.00 reads/s, 0.00 creates/s, 37.32 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000

Bu arada bazı yazılar da vardı. Bunlar muhtemelen 'kirli' sayfaları temizlemek veya 'değişiklik arabelleğinden' dizinleri temizlemek için ertelenmiş yazılardı.

Muhtemelen son 16 saniyede genç / sıcak alanda da aktivite yoktu.


Eh, biz ortalama 6k-10k SELECTs arasında ortalama ve aynı zamanda sunucuda neredeyse 0 disk okuma etkinliği görebilirsiniz, bu yüzden böyle olduğunu sanmıyorum
Safado

"Sorgu önbelleği" sorguların çoğunu tatmin ediyor mu? SHOW VARIABLES LIKE 'query%';ve SHOW GLOBAL STATUS LIKE 'Qc%';ve SHOW GLOBAL VARIABLES LIKE 'Com_SELECT';.
Rick James

0

Tampon havuzu iki bölüme ayrılmıştır: genç bir liste ve genç olmayan bir liste. Yapım hızı, arabellek havuzlarında kaç sayfanın iki liste arasında karıştırıldığını gösterir.

Genç yapılan sayfalar genç olmayan sayfalardır (yani önbellekten okunur). Genç olmayan sayfalar, çok eski veya genç liste dolu olduğu için genç listeden taşınan sayfalardır.

Sayfalardaki oran ikisi arasında taşınırken, şu anda arabellek havuzunun ne kadarının kullanıldığına ve genç havuzun boyutuna bağlıdır. Sıfır olarak ayarlamak, etkin kümenizin (kullandığınız sayfalar) genç havuzdan daha küçük olduğu anlamına gelir.

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.