Cách tăng tốc độ import mysql 8.x

Discussion in 'Hỏi Đáp Kỹ Thuật' started by money, Oct 8, 2021.

  1. money

    money Hương Chủ

    Trước giờ mình vẫn xài mysql cũ (5.x), dùng lệnh dưới đây để import database mysql, khá nhanh.

    Lệnh import:
    Code:
    mysql -u root -p [database.name] < /path-to-file.sql
    Gần đây, mình upgrade lên mysql 8.x, thấy khi import tốc độ rất chậm. File sql khoảng 3GB, tổng số gần 4 triệu rows mà chạy 1 tiếng mới import dc gần 800K rows.

    Tìm hiểu thử, thì có 1 cách tăng tốc khá đơn giản mà hiệu quả:

    - thêm 1 dòng cấu hình như này vào file /etc/my.cnf:
    Code:
    skip-log-bin
    - restart mysql
    - chạy import lại như lệnh trên

    Kết quả: với database như trên đã nói, mất tổng cộng 22p để hoàn thành.
     
    Last edited: Oct 8, 2021
    wpresources, Tony Vu, bmt and 6 others like this.
  2. thangvbvb25

    thangvbvb25 Sơ Nhập Giang Hồ

    Hay quá a ơi, bảo sao lâu vậy
    Bình thường e toàn treo máy qua đêm để import ^^
     
  3. Tạ hơi nặng

    Tạ hơi nặng Bang Chúng

    Các thánh toàn tính bằng gb thì cho nó treo tí, em có mấy chục mb thôi kkk
     
  4. money

    money Hương Chủ

    Trước thấy mọi người hỏi mà anh ko nghĩ là anh em xài mysql mới. Anh xài cái cũ không bị chậm như vậy. Hoá ra cơ chế bin-log này từ version 8.0 mới có.
     
  5. firefox

    firefox Bang Chúng

    hóa ra bên mysql cũng na ná giống mssql. Bên mssql em dùng, nếu bật cái log là chạy mút mùa luôn
     
  6. money

    money Hương Chủ

    Nó dùng để làm replication giống mssql đó pro dev, nên cơ chế giống nhau.
    --- Double Post Merged, Oct 8, 2021, Original Post Date: Oct 8, 2021 ---
    Db tính Gb mà tiền tính MB. Đâu như thánh Tạ, db tính MB mà tiền tính GB :(
     
  7. thangvbvb25

    thangvbvb25 Sơ Nhập Giang Hồ

    Hình như cách này còn tăng tốc độ query hay sao ấy, em test luôn trên server thấy web query mượt hẳn
     
  8. money

    money Hương Chủ

    Anh ko rõ vì anh chưa tìm hiểu nhiều về version 8.x. Nhưng nó không ghi log cho từng query thì chắc sẽ nhanh hơn. Tuy nhiên anh em chú ý là nếu ai dùng chức năng replication của mysql thì KHÔNG NÊN dùng cách này nhé (hoặc tạm thời bật cấu hình khi import và bỏ cấu hình này khi chạy bình thường)
     
  9. thangvbvb25

    thangvbvb25 Sơ Nhập Giang Hồ

    Em dùng mysql chế độ innodb
    Khi import là nó khóa database luôn, vậy sao khi import anh check được 800k row vậy ạ
    Nhiều khi em import mà ko biết làm sau để check được tình hình import đến đâu r
     
  10. money

    money Hương Chủ

    Anh dùng myisam. Mở 1 connect khác rồi count trên table gì đó. Anh quên cú pháp rồi (không phải count(*) from table).
    Cần thì nhắc lại anh vụ này, khi nào ngồi máy tính anh post cho. Em search google cũng có.
     
    thangvbvb25 likes this.
  11. wpresources

    wpresources Bang Chúng

    Thử
     
    thangvbvb25 likes this.
  12. thangvbvb25

    thangvbvb25 Sơ Nhập Giang Hồ

    {big_smile} oki anh, để em vọc luôn google
    --- Double Post Merged, Dec 25, 2021, Original Post Date: Dec 25, 2021 ---
    Lệnh này có tác dụng show ra các process mysql đang chạy phải ko bác bác :#
     
  13. money

    money Hương Chủ

    À đây, sáng giờ cũng lọ mọ trên 4rum mà ko nhắc lại là anh cũng quên luôn

    SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'TBNAME' AND TABLE_SCHEMA = 'DBNAME';

    Anh ko rõ innodb nó có lưu trong schema hay ko nên em phải test thử.

    Và khi vừa import vừa query đếm rows nó sẽ có độ lệch nhất định so với lệnh select count(*). Nhưng lệnh này nhanh, chứ query select count(*) trong lúc bulk insert chậm lắm.
     
    thangvbvb25 and wpresources like this.
  14. wpresources

    wpresources Bang Chúng

    Đấy là câu lệnh cập nhật theo tiến trình trong mysql insert update select gì nó cũng hiện ra.Mà gõ thử là biết mà
     
    thangvbvb25 likes this.
  15. thangvbvb25

    thangvbvb25 Sơ Nhập Giang Hồ

    Vâng, vậy để chốc em test thử luôn ạ ^^, em cám ơn ^^