Tôi đang làm việc trên một ứng dụng bao gồm rất nhiều cơ sở dữ liệu ghi, khoảng ~ 70% chèn và 30% đọc. Tỷ lệ này cũng sẽ bao gồm các bản cập nhật mà tôi cho là một lần đọc và một lần viết. Thông qua các câu lệnh chèn, nhiều khách hàng chèn dữ liệu vào cơ sở dữ liệu thông qua câu lệnh chèn bên dưới:
$mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)");
Câu hỏi là tôi nên sử dụng insert_delay hay sử dụng cơ chế mysqli_multi_query vì câu lệnh insert sử dụng cpu ~ 100% trên máy chủ. Tôi đang sử dụng công cụ InnoDB trên cơ sở dữ liệu của mình để không thể chèn chậm. Chèn trên máy chủ là ~ 36k / giờ và đọc 99,89%, tôi cũng đang sử dụng câu lệnh chọn ở đó lấy dữ liệu bảy lần trong một truy vấn duy nhất , truy vấn này mất 150 giây trên máy chủ để thực thi. Tôi có thể sử dụng loại kỹ thuật hoặc cơ chế nào cho nhiệm vụ này? Bộ nhớ máy chủ của tôi là 2 gb, tôi có nên mở rộng bộ nhớ không?. Có một cái nhìn về vấn đề này, bất kỳ đề nghị sẽ được biết ơn với tôi.
Cấu trúc của bảng:
+-----------------+--------------+------+-----+-------------------+----------------+
| 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 | |
+-----------------+--------------+------+-----+-------------------+----------------+
Cơ sở dữ liệu của tôi hiện trạng, nó hiển thị 41k phần chèn (ghi), rất chậm cho cơ sở dữ liệu của tôi.
SHOW FULL PROCESSLIST
khi nó đang sử dụng cpu 100% không? Có bao nhiêu kết nối bạn cho phép so với bao nhiêu kết nối được thực hiện trong thời gian này?
SHOW GLOBAL VARIABLES LIKE 'innodb%';
và SELECT VERSION();
và hiển thị đầu ra của họ.