Tôi đang chạy một máy chủ MySQL 5.5 trên máy trạm của mình để phân tích dữ liệu khoa học và tự hỏi làm thế nào để định cấu hình MySQL để tận dụng tối đa hiệu năng của nó. Các loại truy vấn mà tôi thường chạy bao gồm các phép nối 10-20 bảng và có thể chạy khá lâu, từ một đến vài phút cũng không ngoại lệ. Chỉ có rất ít người dùng truy cập cơ sở dữ liệu cùng một lúc (5 là tối đa). Tôi đã chuyển máy chủ từ Lenovo Thinkpad T61 với Dual Core 2.2 GHz và RAM 4 GB sang máy hoàn toàn mới sau đây với các thành phần được chọn bằng tay:
- Intel i7 3770, 4x 3,4 GHz (chạy @ 4x3,7 GHz)
- Chipset Z77
- 16 GB RAM DDR3 1600
- Windows 7 Prof 64-bit
- Máy chủ Windows và MySQL chạy trên ổ SSD Intel 520 series.
Các thử nghiệm đầu tiên (chạy cùng một truy vấn trên cả hai máy) đã cho thấy sự cải thiện rõ rệt về tốc độ cho máy mới, nhưng các truy vấn vẫn mất nhiều thời gian và tôi đã mong đợi nhiều hơn về sự tăng cường. Các truy vấn trong câu hỏi được tối ưu hóa khá tốt, tức là tất cả các bảng đều có khóa thích hợp cũng đang được sử dụng như là "giải thích mở rộng".
Bây giờ đến cài đặt MySQL hiện tại của tôi: Đầu tiên tôi nên đề cập rằng tôi đã chuyển từ MyISAM sang Innodb từ lâu.
Một số điều chỉnh my.ini của tôi (tức là khởi hành từ cài đặt mặc định):
# Maximum size for internal (in-memory) temporary tables. If a table
# grows larger than this value, it is automatically converted to disk
# based table This limitation is for a single table. There can be many
# of them.
#tmp_table_size=35M
tmp_table_size=4000M
max_heap_table_size=4000M
# InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and
# row data. The bigger you set this the less disk I/O is needed to
# access data in tables. On a dedicated database server you may set this
# parameter up to 80% of the machine physical memory size. Do not set it
# too large, though, because competition of the physical memory may
# cause paging in the operating system. Note that on 32bit systems you
# might be limited to 2-3.5G of user level memory per process, so do not
# set it too high.
#innodb_buffer_pool_size=96M
innodb_buffer_pool_size=800M
general-log
expire_logs_days = 60
general_log_file = "F:/my_query_mysql.log"
log-output = TABLE
optimizer_search_depth = 0 #meant to cure the "statistics state" bug in some queries
Tôi muốn biết liệu ai đó sẽ đề xuất thay đổi cho các số trên hoặc thậm chí các cài đặt khác mà tôi không biết.
Tôi đánh giá cao bất kỳ nhận xét hữu ích.
Steve
EDIT: Tôi có hai truy vấn liên quan đến việc tham gia trên 10-20 bảng và chạy chúng trên máy tính xách tay Lenovo của tôi và PC mới. Truy vấn số 1 mất 3,336 giây trên máy mới so với 9m11 trên máy tính xách tay; Truy vấn # 2 mất 22,5 giây trên máy trạm so với 48,5 giây trên máy tính xách tay. Vì vậy, tốc độ thực hiện đã được cải thiện khoảng 2-2,5. Trên máy trạm, thậm chí không sử dụng 50% RAM. Tải CPU trung bình trên bốn lõi (theo báo cáo của Windows Task Manager) chỉ khoảng 13%. Tải trên cơ sở mỗi lõi (như được báo cáo bởi Core Temp) là khoảng 25-40% cho MỘT lõi, trong khi đó là <= 10% cho các lõi khác, cho thấy rằng MySQL không sử dụng nhiều lõi cho một truy vấn duy nhất .