Tôi đang cố gắng hiểu rõ hơn về tốc độ chèn và các mẫu hiệu suất trong mysql cho một sản phẩm tùy chỉnh. Tôi có hai bảng mà tôi tiếp tục thêm hàng mới. Hai bảng được định nghĩa như sau:Tốc độ chèn chậm khi bảng phát triển trong mysql
CREATE TABLE events (
added_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id BINARY(16) NOT NULL,
body MEDIUMBLOB,
UNIQUE KEY (id)) ENGINE InnoDB;
CREATE TABLE index_fpid (
fpid VARCHAR(255) NOT NULL,
event_id BINARY(16) NOT NULL UNIQUE,
PRIMARY KEY (fpid, event_id)) ENGINE InnoDB;
Và tôi tiếp tục chèn các đối tượng mới vào cả hai bảng (cho mỗi đối tượng mới, tôi chèn thông tin liên quan vào cả hai bảng trong một giao dịch). Lúc đầu, tôi nhận được khoảng 600 insertions/sec, nhưng sau ~ 30000 hàng, tôi nhận được một sự suy giảm đáng kể (khoảng 200 insertions/sec), và sau đó chậm hơn, nhưng vẫn đáng chú ý chậm lại.
Tôi có thể thấy rằng khi bảng phát triển, số chờ IO ngày càng cao. Suy nghĩ đầu tiên của tôi là bộ nhớ được thực hiện bởi chỉ mục, nhưng những người được thực hiện trên một máy ảo có 768 Mb, và được dành riêng cho nhiệm vụ này một mình (2/3 bộ nhớ không sử dụng). Ngoài ra, tôi có một thời gian khó nhìn thấy 30000 hàng dùng quá nhiều bộ nhớ, thậm chí nhiều hơn như vậy chỉ là các chỉ mục (toàn bộ dữ liệu mysql dir < 100 Mb anyway). Để xác nhận điều này, tôi đã cấp rất ít bộ nhớ cho VM (64 Mb) và mô hình chậm lại gần như giống hệt nhau (nghĩa là sự chậm lại xuất hiện sau cùng số lần chèn), vì vậy tôi nghi ngờ một số vấn đề về cấu hình, đặc biệt là vì tôi tương đối mới cơ sở dữ liệu.
Các mô hình trông như sau:
Tôi có một kịch bản python khép kín mà tái tạo vấn đề, mà tôi có thể làm cho có sẵn nếu đó là hữu ích.
Cấu hình:
- Ubuntu 10.04, 32 bit chạy trên KVM, 760 Mb phân bổ cho nó.
- Mysql 5.1, ra khỏi cấu hình hộp với các tập tin riêng biệt cho các bảng
[EDIT]
Cảm ơn bạn rất nhiều để Eric Holmberg, ông đóng đinh nó. Dưới đây là các biểu đồ sau khi sửa innodb_buffer_pool_size thành giá trị hợp lý:
Sự cố khả năng ghi vào ổ đĩa, ảo hoặc cách khác. –
Tôi không chắc tôi hiểu ý của bạn là gì: Tôi hiểu rằng phải mất thời gian để ghi vào đĩa, nhưng điều đó không giải thích được sự chậm lại khi bảng phát triển. –