Ben veritabanı yazma, yaklaşık ~ 70% ekler ve% 30 okur bir sürü içeren bir uygulama üzerinde çalışıyorum. Bu oran aynı zamanda bir okuma ve bir yazma olduğunu düşündüğüm güncellemeleri de içerir. Insert deyimleri sayesinde, birden fazla istemci aşağıdaki insert deyimi aracılığıyla veri tabanına veri ekler:
$mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)");
Soru, insert_delay kullanmalı mysq veya mysqli_multi_query mekanizmasını kullanmalıyım çünkü insert deyimi sunucuda ~% 100 cpu kullanıyor. Ben gecikmeli eklemek mümkün değil bu yüzden benim veritabanında InnoDB motoru kullanıyorum. Sunucuda ekleme ~ 36k / saat ve% 99.89 okunur, ayrıca tek bir sorguda yedi kez veri almak için select deyimi kullanıyorum , bu sorgu yürütmek için sunucuda 150 saniye sürer. Bu görev için ne tür bir teknik veya mekanizma kullanabilirim? Sunucu belleğim 2 gb, belleği genişletmeli miyim? Bu soruna bir göz atın, herhangi bir öneri bana minnettar olacaktır.
Tablonun yapısı:
+-----------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user | varchar(100) | NO | | NULL | |
| uniq_name | varchar(200) | NO | | NULL | |
| ad_name | varchar(200) | NO | | NULL | |
| ad_delay_time | int(11) | NO | | NULL | |
| track_time | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
+-----------------+--------------+------+-----+-------------------+----------------+
Benim veritabanı mevcut durumu, benim veritabanı için çok yavaş 41k eklemeler (yazar) gösterir.
SHOW FULL PROCESSLIST
% 100 işlemci alırken kısa bir açıklama yapabilir misiniz ? Kaç bağlantıya izin veriyorsunuz veya bu süre zarfında kaç bağlantı yapılıyor?
SHOW GLOBAL VARIABLES LIKE 'innodb%';
ve SELECT VERSION();
çıktılarını görüntüleyin.