Bằng cách có các chỉ mục thích hợp trên các bảng MySQL của bạn, bạn có thể nâng cao hiệu suất của các truy vấn SELECT. Tuy nhiên, bạn có biết rằng việc thêm chỉ mục vào bảng của bạn là một thao tác tốn kém và có thể mất nhiều thời gian để hoàn thành tùy thuộc vào kích thước bảng của bạn? Trong thời gian này, bạn cũng có thể gặp phải hiệu suất truy vấn bị giảm sút vì tài nguyên hệ thống của bạn cũng đang bận rộn trong công việc tạo chỉ mục. Trong bài đăng trên blog này, chúng tôi thảo luận về một cách tiếp cận để tối ưu hóa quy trình tạo chỉ mục MySQL theo cách mà khối lượng công việc thường xuyên của bạn không bị ảnh hưởng.
Tạo chỉ mục cuộn MySQL
Chúng tôi gọi cách tiếp cận này là 'Tạo chỉ mục cuộn' - nếu bạn có tập hợp bản sao chính-tớ của MySQL, bạn có thể tạo chỉ mục từng nút một theo cách luân phiên. Bạn chỉ nên tạo chỉ mục trên các nút phụ để hiệu suất của chính không bị ảnh hưởng. Khi quá trình tạo chỉ mục hoàn tất trên các nô lệ, chúng tôi hạ cấp trang chủ hiện tại và thăng cấp một trong các nô lệ được cập nhật làm trang chủ mới. Tại thời điểm này, việc xây dựng chỉ mục tiếp tục trên nút chính ban đầu (hiện là nút phụ). Sẽ có một khoảng thời gian ngắn (hàng chục giây) trong đó bạn sẽ mất kết nối với cơ sở dữ liệu của mình do chuyển đổi dự phòng, nhưng điều này có thể được khắc phục bằng cách thử lại cấp ứng dụng.
Lợi ích về hiệu suất của việc tạo chỉ mục cuộn
Chúng tôi đã thực hiện một thử nghiệm nhỏ để hiểu các lợi ích về hiệu suất của Tạo chỉ mục cuộn.
Thử nghiệm sử dụng tập dữ liệu MySQL được tạo bằng Sysbench có 3 bảng với 50 triệu hàng mỗi bảng. Chúng tôi đã tạo tải trên MySQL master với 30 máy khách chạy khối lượng công việc cân bằng (50% đọc và 50% ghi) trong 10 phút, đồng thời, xây dựng một chỉ mục phụ đơn giản trên một trong các bảng trong hai tình huống:
- Tạo chỉ mục trực tiếp trên trang cái
- Tạo chỉ mục trên nô lệ
Cấu hình MySQL Test Bed
Loại phiên bản MySQL | Phiên bản EC2 m4.large với RAM 8GB |
---|---|
Loại triển khai | Bộ 2 Node Master-Slave với Sao chép Bán đồng bộ |
Phiên bản MySQL | 5.7.25 |
Kết quả Hiệu suất
Tình huống | Thông lượng khối lượng công việc (Truy vấn mỗi giây) | Độ trễ phần trăm thứ 95 |
---|---|---|
Tạo chỉ mục trên Master | 453,63 | 670 mili giây |
Tạo chỉ mục cuộn | 790.03 | 390 mili giây |
Bài học rút ra
Bằng cách chạy tạo chỉ mục trực tiếp trên MySQL master, chúng tôi chỉ có thể trải nghiệm 60% thông lượng đạt được khi chạy tạo chỉ mục trên MySQL slave thông qua thao tác luân phiên. Độ trễ phân vị thứ 95 của các truy vấn cũng cao hơn 1,8 lần khi quá trình tạo chỉ mục diễn ra trên máy chủ chính.
Phương pháp hay nhất để tạo chỉ mục trên #MySQL Tables của bạnNhấp vào TweetTự động tạo chỉ mục cuộn
ScaleGrid tự động tạo Chỉ mục cuộn cho việc triển khai MySQL của bạn với giao diện người dùng đơn giản để bắt đầu.
Trong giao diện người dùng ở trên, bạn có thể chọn Cơ sở dữ liệu và tên Bảng của mình và ‘Thêm chỉ mục’ làm Thao tác thay thế bảng. Sau đó, chỉ định Tên cột và Tên chỉ mục, và Lệnh bảng thay thế sẽ được tạo và hiển thị cho bạn. Khi bạn nhấp để Tạo, việc tạo chỉ mục sẽ diễn ra từng nút một theo kiểu luân phiên.
Ngoài ra, ScaleGrid cũng hỗ trợ các thao tác trên Bảng thay thế đơn giản khác như thêm cột mới vào bảng của bạn theo kiểu cuộn. Hãy theo dõi bài đăng blog tiếp theo của tôi với nhiều chi tiết hơn!