Saya sedang mengerjakan aplikasi yang melibatkan banyak penulisan basis data, kira-kira ~ 70% sisipan dan 30% dibaca. Rasio ini juga akan mencakup pembaruan yang saya anggap satu baca dan satu tulis. Melalui pernyataan penyisipan, beberapa klien memasukkan data ke dalam basis data melalui pernyataan menyisipkan di bawah ini:
$mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)");
Pertanyaannya adalah apakah saya harus menggunakan insert_delay atau menggunakan mekanisme mysqli_multi_query karena pernyataan insert menggunakan ~ 100% cpu di server. Saya menggunakan mesin InnoDB pada database saya sehingga memasukkan yang tertunda tidak mungkin. Penyisipan di server ~ 36k / jam dan 99,89% dibaca, saya juga menggunakan pernyataan pilih di sana mengambil data tujuh kali dalam permintaan tunggal , permintaan ini membutuhkan 150 detik pada server untuk mengeksekusi. Teknik atau mekanisme apa yang bisa saya gunakan untuk tugas ini? Memori server saya adalah 2 gb, apakah saya harus menambah memori? Lihat masalah ini, setiap saran akan berterima kasih kepada saya.
Struktur meja:
+-----------------+--------------+------+-----+-------------------+----------------+
| 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 | |
+-----------------+--------------+------+-----+-------------------+----------------+
Basis data status saya, ini menunjukkan 41k penyisipan (menulis), yang sangat lambat untuk database saya.
SHOW FULL PROCESSLIST
saat mengambil 100% cpu? Berapa banyak koneksi yang Anda izinkan vs berapa banyak yang diambil selama waktu ini?
SHOW GLOBAL VARIABLES LIKE 'innodb%';
dan SELECT VERSION();
dan tampilkan hasilnya.