Tôi đã được giới thiệu một số máy chủ MySQL chuyên dụng không bao giờ sử dụng nhiều hơn một lõi. Tôi là nhà phát triển hơn DBA cho MySQL nên cần một số trợ giúp
Thiết lập
Các máy chủ khá nặng với tải loại OLAP / DataWarehouse (DW):
- Chính: RAM 96GB, 8 lõi + mảng RAID 10 đơn
- Kiểm tra: RAM 32 GB với 4 nhân
- DB lớn nhất là 540 GB, tổng cộng là khoảng 1,1TB và chủ yếu là các bảng InnoDB
- Solaris 10 Intel-64
- MySQL 5.5.x
Lưu ý: DB lớn nhất là DB được sao chép từ máy chủ OLTP DR và DW được tải từ đây. Nó không phải là DW đầy đủ: chỉ 6 tháng đến 6 tuần nên nó nhỏ hơn OLTP DB.
Quan sát trên một máy chủ thử nghiệm
- 3 kết nối riêng biệt
- mỗi cái có một đồng thời (và khác nhau)
ALTER TABLE...DROP KEY...ADD INDEX
- 3 bảng có 2,5, 3,8 và 4,5 triệu hàng
- Việc sử dụng CPU tăng tới 25% (tối đa một lõi) và không cao hơn
- 3 ALTER mất 12-25 phút (một lần nhỏ nhất mất 4,5)
Câu hỏi
- Những cài đặt hoặc bản vá nào được yêu cầu để cho phép nhiều hơn một lõi được sử dụng?
Đó là, tại sao MySQL không sử dụng tất cả các lõi có sẵn? (giống như các RDBMS khác) - Nó có phải là một hệ quả của việc nhân rộng?
Ghi chú khác
- Tôi hiểu sự khác biệt giữa "luồng" RDBMS và "luồng" hệ điều hành
- Tôi không hỏi về bất kỳ hình thức song song nào
- Một số biến hệ thống cho InnoDB và các luồng là tối ưu phụ
(tìm kiếm một chiến thắng nhanh chóng) - Ngắn hạn, tôi không thể thay đổi cách bố trí đĩa
- Hệ điều hành có thể được điều chỉnh nếu cần
- Một ALTER TABLE duy nhất trên bàn nhỏ nhất mất 4,5 phút (gây sốc IMO)
Chỉnh sửa 1
- innodb_thread_concurrency được đặt thành 8 trên cả hai. Đúng, nó sai nhưng sẽ không khiến MySQL sử dụng nhiều lõi
- innodb_buffer_pool_size là 80GB trên bản chính, 10GB cho một bài kiểm tra (một trường hợp khác bị tắt). Điều này là ổn cho bây giờ.
- innodb_file_per_table = BẬT
Chỉnh sửa 2
- innodb_flush_log_at_trx_commit = 2
- innodb_use_sys_malloc = BẬT
- innodb_flush_method phải là O_DIRECT (nhưng SHOW VARIABLES không hiển thị điều này)
- innodb_doublewrite = TẮT
- Hệ thống tệp = ZFS (Và sysadmin của tôi đã tìm thấy cái này: http://bloss.oracle.com/realneel/entry/mysql_innodb_zfs_best_practices )
Để kiểm tra
- innodb_flush_method không hiển thị dưới dạng O_DIRECT khi cần
- sẽ theo các cài đặt của RolandoMySQLDBA
Hãy cho tôi biết nếu tôi bỏ lỡ bất cứ điều gì quan trọng
Chúc mừng
Cập nhật
Đã thay đổi cài đặt chủ đề innodb_flush_method + 3 x trong câu trả lời của RolandoMySQLDBA
Kết quả:> 1 lõi được sử dụng cho các bài kiểm tra = kết quả dương tính
\G
. Ngoài ra, tôi nghĩ SHOW INNODB STATUS
không được ủng hộ SHOW ENGINE INNODB STATUS
trong 5.5 (Tôi gặp lỗi khi chạy lệnh cũ.