Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 33231|Yanıt: 6

[Kaynak] MySQL, yüksek eşzamanlılık durumlarda yüksek CPU kullanımını analiz eder

[Bağlantıyı kopyala]
Yayınlandı 5.09.2017 20:23:59 | | | |


Son zamanlarda, bazı nedenlerle web sitesi ziyareti sayısı keskin şekilde arttı ve bu şekilden eşzamanlı bağlantı sayısının 1.200'den fazla olduğu görülebilir

Çünkü sunucu yapılandırması çok düşük, 1 çekirdek ve 2G bellek var, ayrıca çok sayıda insan olduğunda web sitesine erişim çok yavaş


Kontrol etmek için üst komutu kullanıyoruz, mysql çok fazla CPU ve bellek kaplıyor, diğer süreçler ise php-fpm CPU ve bellek kaplıyor, ki bu çok yüksek değil

Eğer mysql normal çalışıyorsa, PHP'deki bazı SQL ifadeleri sorunların keşfedilmesine neden olur ve root kullanıcı mysql yönetimine girer
mysql -u kök -p
Şifreyi girin, ardından aşağıdaki komutu girin




Bu komutla, veritabanının sürekli olarak silme işlemlerini where koşullarıyla yürüttüğünü görebiliyoruz.



pre_k_spider bu tablo, muhtemelen yüklenmiş bir eklenti nedeniyle örümcek erişimlerini kaydeden bir tablodur

Tabloda 100.000'den fazla kayıt olduğunu ve pre_k_spider sorgu 33 saniye sürdüğünü görebiliyoruz



Bu tabloyu kesin bir şekilde boşalt, sonra yönetim arka planına gidip ilgili eklentileri kapatıp normale geri getir!









Önceki:Alibaba Cloud Cloud Marketplace Doğrulama Kodu Tanıma Hizmeti
Önümüzdeki:my.cnf yapılandırma dosyasını görüntülemek için mysql 5.6.21
 Ev sahibi| Yayınlandı 6.09.2017 09:32:56 |


Bugün web sitesi yine takılı kaldı ve çok sayıda uyku bululdu

Uyku nedenleri:

1 İstemci programı çıkıştan önce mysql_close() çağrısı yapmadı.

2 İstemci sunucuya herhangi bir istek göndermeden wait_timeout veya interactive_timeout saniyeden fazla uykudaydı.

3 İstemci programı, veri transferinin ortasında aniden sona erdi

Aynı dönemdeki uyku süreçlerinin sayısı çok yüksekse ve diğer eyaletlerdeki toplam bağlantı sayısı max_connection değerini aşarsa, MySQL artık kök kullanıcı dışında hiçbir isteği işleyemez, herhangi bir istekle bağlantı kuramaz veya doğrudan takılır

Çözüm:

1. İlk olarak, programınızın pconnect yöntemini kullanıp kullanmadığını kontrol edin, ikincisi ise mysql_close()'nin sayfa çalıştırılmadan önce çağırılıp çağrılmadığını kontrol edin. Pconnect yöntemini kullanmamaya çalışın, yani mysql_connect kullanın. Program yürütüldüğünde, mysql_close açıkça çağrılmalıdır

2. my.cnf'e wait_timeout ve interactive_timeout ekleyin, değeri daha küçük ayarlayın, varsayılan olarak wait_timeout değeri 8 saat, 1 saat veya yarım saat olarak değiştirebilirsiniz. Bu şekilde mysql ölü bağlantıları daha hızlı öldürür. Toplam bağlantı sayısının max_connection değerini aşmasını önleyin.

wait_timeout çok büyük olursa, MySQL'de çok sayıda SLEEP işlemi zamanında yayınlanır ve sistem performansını düşürür, ancak ayarlar çok küçükse "MySQL kayboldu" gibi sorunlarla karşılaşabilirsiniz

max_connection değerini daha yüksek bir değere ayarlayın, ama bu açıkça uygun değil, ne kadar çok bağlantınız olursa, sunucunuza o kadar çok stres verir. Aslında, bu bağlantılar gereksiz ve onları mümkün olan en kısa sürede kapatmak en iyi politikadır.

3. Sistemin SQL sorgusunu adım adım analiz edin, çok yavaş olan SQL'i bulun ve optimize edin



1)interactive_timeout:
Parametre anlamı: Sunucunun etkileşimli bağlantıyı kapatmadan önce bir etkinliği beklediği saniye sayısı. İnteraktif istemci, mysql_real_connect() içinde CLIENT_INTERACTIVE seçeneği kullanan bir istemci olarak tanımlanır.
Parametre varsayılan: 28800 saniye (8 saat)

(2)wait_timeout:
Parametre anlamı: Sunucunun etkileşimsiz bağlantıyı kapatmadan önce faaliyet için beklediği saniye sayısı.
İş parçacığı başladığında, oturum wait_timeout değeri, istemci tipine (mysql_real_connect()'CLIENT_INTERACTIVE bağlantı seçeneklerine bağlı olarak, küresel wait_timeout veya küresel interactive_timeout değerine göre başlatılır.
Parametre varsayılan: 28800 saniye (8 saat)

MySQL Server'ın destekleyebileceği maksimum bağlantı sayısına bir üst sınır vardır; çünkü her bağlantı kurulmuş ve bellek tüketir, bu nedenle istemcilerin MySQL Server'a bağlandıktan sonra kaplı belleği kapatıp serbest bırakmasını bekleriz. MySQL Server'ınızda çok sayıda boşta bağlantı varsa, sadece boşuna bellek tüketmekle kalmaz, bağlantılar birikmeye ve açılmaya devam ederse, sonunda MySQL Server'daki maksimum bağlantı sayısına ulaşır ve bu da 'çok fazla bağlantı' hatası bildirir. wait_timeout değer ayarı sistemin işleyişine göre değerlendirilmelidir. Sistem bir süre çalıştıktan sonra, mevcut sistemin bağlantı durumunu göster processlist komutuyla kontrol edebilirsiniz; uyku durumunda çok sayıda bağlı işlem bulursanız, bu parametre ayarının çok büyük olduğu anlamına gelir ve daha küçük ayarlamalar yapmak için uygun ayarlamalar yapabilirsiniz.


SQL Komutası:



Bu modifikasyon yöntemiMysql servisini yeniden başlattıktan sonra geçersiz olur, bu yüzden bu iki özelliği mysql yapılandırma dosyasında yapılandırmak en iyisidir.

My.cnf dosyasını Linux altında değiştirin:




Yayınlandı 6.09.2017 11:15:15 |
Bir master-slave sunucu almam gerekiyor
 Ev sahibi| Yayınlandı 6.09.2017 11:15:49 |
vrchary 2017-9-6 11:15 tarihinde yayınlandı
Bir master-slave sunucu almam gerekiyor

Sunucu yapılandırma nedeni Yapılandırma düşük   
 Ev sahibi| Yayınlandı 6.09.2017 13:47:56 |
"mysql-bin.000001" sorunu çözüldü, büyük bir alan kapladı
http://www.itsvse.com/thread-2694-1-1.html
(Kaynak: Architect)

MySQL'i portlarla kurduktan sonra bir süre sonra /var alanının yetersiz olduğunu fark ettim, kontrol ettim ve mysql-bin.000001, mysql-bin.000002 ve diğer dosyaların yer kapladığını gördüm, peki bu dosyalar ne için? Bu, veritabanının işlem günlüğüdür; örneğin bir tabloyu UPDATE veya bazı verileri SIL, ifade veriyle eşleşmese bile, bu komut kayıt dosyasında saklanır ve her ilanın çalışma süresi de dahil olur ve bu da kaydedilir.

Bu esas olarak aşağıdaki iki amaç için yapılır:
1: Veri kurtarma
Veritabanınızda bir sorun varsa ve önceden bir yedekiniz varsa, veritabanınızın sorununa neden olan komutu bulmak için log dosyasına bakabilir ve kaybı geri kazanmanın bir yolunu bulabilirsiniz.
2: Verileri ana köle-köle sunucular arasında senkronize etmek
Ana sunucudaki tüm işlemler, köle sunucunun her ikisinin senkronize olmasını sağlamak için kullanabileceği bir günlükte kaydedilir.

Sadece kütüğü kapat


 Ev sahibi| Yayınlandı 9.10.2017 14:33:30 |
Mysqld çok CPU ve Windows'u işgal ediyor



Çözüm: SQL ifadesini optimize edin
Yayınlandı 30.12.2021 23:15:36 |
Destekliyor musun!!!!!!!!!!!!!!!!
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com