mysql neden DB'deki tablolardan çok daha fazla açık ve parçalanmış tabloya sahip?


0

Veritabanımızı biraz daha düzgün hale getirmek için çalışıyorum ve geçen hafta boyunca iyi sonuçlar aldım. Ama hala anlamadığım bazı şeyler var.

Birincisi, veritabanında 25 tablo var. Ancak mysql durumu 512'nin açık olduğunu gösteriyor: mysqladmin durumu Çalışma Süresi: 212854 Konular: 1 Sorular: 43041 Yavaş sorgular: 7 Açılış: 2605 Masayı: 1 Açık masalar: 512 Saniyede sorulan ortalama: 0,202

İsam'ın ekstra dosya tanımlayıcıları açtığını ve açık tablo sayısının 25'ten yüksek olmasının bir başka nedeni olduğunu okudum, ancak 512'nin iyi bir şey olmadığını tahmin ediyorum. Bunun neden olabileceği veya neye bakmam gerektiği konusunda herhangi bir öneriniz var mı?

Ayrıca mysqltuner kullanıyorum ve yardımcı oldu. Fakat parçalanmış tabloların sayısını 207'de tutarlı bir şekilde sıraladı. Phpmyadmin'de tüm tabloları seçtim ve birkaç kez optimize ettim. MySQL'in test ettiği parçalanmış tabloların sayısını azaltmadı.

Bunun nasıl çalıştığı hakkında bazı önemli kavramları özlüyorum galiba. Beni doğru yöne ya da google aramaları daraltmak ya da genellikle daha az ipucu vermeme yardımcı olmak için herhangi bir önerisi olan var mı?

Teşekkürler!

-------- Genel istatistikler ---------------------------------------- ----------
[-] MySQLTuner betiği için sürüm kontrolü atlandı
[Tamam] Şu anda çalışıyor, MySQL 5.5.5-log versiyonunu destekliyor
[Tamam] 64 bit mimaride çalışıyor

-------- Depolama Motoru İstatistikleri ----------------------------------------- ----
[-] Durum: + Arşiv -BDB -Fererated + InnoDB -ISAM -NDBCluster
[-] MyISAM tablolarındaki veriler: 1M (Tablolar: 254)
[-] InnoDB tablolarındaki veriler: 3M (Tablolar: 199)
[-] PERFORMANCE_SCHEMA tablolarındaki veriler: 0B (Tablolar: 17)
[!!] Toplam parçalanmış tablo: 200

-------- Güvenlik Tavsiyeleri -------------------------------------------- ---
[Tamam] Tüm veritabanı kullanıcılarının atanmış şifreleri var

-------- Performans Metrikleri -------------------------------------------- ---------
[-] Şunun için: 3d 12h 5m 8s (142K q [0.472 qps], 11K bağlantı, TX: 105M, RX: 37M)
[-] Okur / Yazar:% 79 /% 21
[-] Toplam tampon: 202.0M global + konu başına 2.5M (100 maksimum konu)
[OK] Mümkün olan maksimum hafıza kullanımı: 452.0M (kurulu RAM'in% 48'i)
[Tamam] Yavaş sorgular: 0% (8 / 142K)
[Tamam] Mevcut bağlantıların en yüksek kullanımı:% 9 (9/100)
[Tamam] Anahtar tampon boyutu / toplam MyISAM endeksleri: 16.0M / 741.0K
[OK] Anahtar tampon isabet oranı:% 99.9 (404K önbelleklenmiş / 513 okur)
[OK] Sorgu önbellek verimliliği:% 72.1 (61K önbelleklenmiş / 84K seçer)
[OK] Günlük sorgu önbellek kuru erik: 0
[Tamam] Geçici tablolar gerektiren sıralar: 0% (0 geçici sıralar / 1K sıralar)
[!!] Diskte oluşturulan geçici tablolar:% 41 (diskte 6K / toplamda 14K)
[OK] Thread cache hit rate:% 99 (9 oluşturuldu / 11K bağlantı)
[!!] Tablo önbellek isabet oranı:% 15 (512 açık / 3K açık)
[OK] Açık dosya limiti kullanıldı: 55% (633 / 1K)
[Tamam] Tablo kilitleri hemen edinildi:% 100 (40K hemen / 40K kilitleri)
[!!] Bağlantılar iptal edildi:% 7
[Tamam] InnoDB veri boyutu / tampon havuzu: 3.3M / 16.0M

-------- Öneriler ------------------------------------------- ------------
Genel öneriler:
    Daha iyi performans için tabloları birleştirmek için OPTIMIZE TABLE komutunu çalıştırın.
    Ayarlamaları yaparken, tmp_table_size / max_heap_table_size değerini eşitleyin
    SELECT DISTINCT sorgularını LIMIT cümleleri olmadan azaltın
    Dosya tanımlayıcı sınırlarını önlemek için table_cache'i yavaş yavaş artırın
    Uygulamalarınız MySQL bağlantılarını düzgün kapatmıyor
Ayarlanacak değişkenler:
    tmp_table_size (> 128M)
    max_heap_table_size (> 128M)
    table_cache (> 512)

Sormalıyım, sadece 25 masanız olduğundan emin misiniz? Ben yapacağını mysqldump --all-databasesve daha sonra tüm verileri yeniden MySQL veri dir silin. Ayrıca, mysqltunner.plburadan çıktısını almalısınız .
drcelus

her şeyi bırakmak ve yeniden yüklemek çok zor bir iş olurdu, çok fazla izin almak zorunda kaldım ve sonra birkaç insan grubuyla koordine etmek zorunda kaldım, bundan kaçınmayı umuyorum. Çıktısını mysqltuner'dan ekledim. Tablo önbelleğini daha da düzenleme önerisi yenidir.
karmet

Masalar konusunda haklısın. 37 tablo olan information_schema saymıyordum ama erişimim yok gibi görünüyor. Bu bana araştırmam gereken bir şey veriyor.
karmet

Yanıtlar:


1

Bunun muhtemelen table_cacheve / veya ile ilgisi var max_connections.

MyISAM tablolarında, her yeni iş parçacığı / bağlantısının tabloyu açması gerekir. Başka bir deyişle, bir masaya ve o masaya erişen on müşteriniz varsa, MySQL durum satırına göre on açık masaya sahipsiniz. table_cacheParçacığı için açık tablolar tutarak bunun olmasını sürekli açık / kapalı tablo çalışmalarını azaltmaya yardımcı olur.

Tablo önbelleğiniz oldukça iyi çalışıyor gibi görünüyor, çünkü 43 041 sorgu yapıldı, ancak tabloların yalnızca 2605 kez açılması gerekiyordu.

InnoDB kendi bağlantı havuzuna sahiptir ve biraz farklı davranır.

Daha fazla bilgi için MySQL'in tabloları nasıl açtığını ve kapattığını görün .

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.