Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL tối ưu hóa INSERT tốc độ bị chậm lại do các chỉ số

Nếu bạn muốn chèn nhanh, điều đầu tiên bạn cần là phần cứng phù hợp. Điều đó giả định có đủ dung lượng RAM, ổ SSD thay vì ổ đĩa cơ học và CPU khá mạnh.

Vì bạn sử dụng InnoDB, điều bạn muốn là tối ưu hóa nó vì cấu hình mặc định được thiết kế cho các máy cũ và chậm.

Đây là bài đọc tuyệt vời về cách định cấu hình InnoDB

Sau đó, bạn cần biết một điều - đó là cách cơ sở dữ liệu thực hiện nội bộ, cách ổ cứng hoạt động, v.v. Tôi sẽ đơn giản hóa cơ chế trong phần mô tả sau:

Một giao dịch là MySQL đang đợi ổ cứng xác nhận rằng nó đã ghi dữ liệu. Đó là lý do tại sao các giao dịch chậm trên các ổ đĩa cơ học, chúng có thể thực hiện 200-400 hoạt động đầu vào-đầu ra mỗi giây. Đã dịch, điều đó có nghĩa là bạn có thể nhận được 200 truy vấn chèn mỗi giây bằng cách sử dụng InnoDB trên ổ đĩa cơ học. Đương nhiên, đây là lời giải thích đơn giản hóa , chỉ để phác thảo những gì đang xảy ra, đó không phải là cơ chế đầy đủ đằng sau giao dịch .

Vì một truy vấn, đặc biệt là truy vấn tương ứng với kích thước bảng của bạn, tương đối nhỏ về byte - bạn đang lãng phí IOPS quý giá trên một truy vấn.

Nếu bạn kết hợp nhiều truy vấn (100 hoặc 200 hoặc nhiều hơn, không có con số chính xác, bạn phải kiểm tra) trong một giao dịch và sau đó cam kết - bạn sẽ ngay lập tức đạt được nhiều lượt ghi hơn mỗi giây.

Percona guys đang đạt được 15k lần chèn một giây trên một phần cứng tương đối rẻ. Thậm chí 5k lần chèn một giây cũng không tệ. Bảng như của bạn nhỏ, tôi đã thực hiện các bài kiểm tra trên một bảng tương tự (thêm 3 cột) và tôi đã đạt được 1 tỷ bản ghi mà không có vấn đề gì đáng chú ý, sử dụng máy ram 16gb với SSD 240GB (1 ổ, không có RAID, được sử dụng cho mục đích thử nghiệm).

TL; DR:- theo liên kết ở trên, định cấu hình máy chủ của bạn, nhận ổ SSD, kết hợp nhiều lần chèn trong 1 giao dịch và thu lợi nhuận. Và đừng tắt rồi bật lập chỉ mục, nó không phải lúc nào cũng áp dụng được, vì tại một số thời điểm, bạn sẽ tốn thời gian xử lý và IO để xây dựng chúng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. So sánh điểm tương đồng giữa hai tập kết quả

  2. Việc có hàng triệu bảng và hàng triệu hàng trong đó có phải là một thực tế phổ biến trong thiết kế cơ sở dữ liệu MySQL không?

  3. Tham gia so với truy vấn phụ

  4. Có lý do gì để không sử dụng <=> (toán tử =null safe) trong mysql thay vì =?

  5. Lưu trữ thông tin thời gian:Múi giờ bắt buộc?