Làm cách nào để tận dụng tối đa MySQL trên máy QuadCore với 16 GB RAM?


10

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 .


Vui lòng hiển thị tải máy chủ của bạn, vì vậy hãy kiểm tra bộ nhớ, io, tải cpu, v.v.

Tôi sẽ chạy một số thử nghiệm và báo cáo lại những gì Trình quản lý tác vụ Windows nói (hoặc bạn sẽ tư vấn một công cụ tốt hơn?)

Điều đó là đủ cho một dấu hiệu đầu tiên để xem vấn đề của bạn ở đâu.

chỉ cần thêm một số số liệu thống kê.

2
Ngoài ra, bạn cũng có thể dùng thử Trình hướng dẫn Percona để nhận cài đặt "được đề xuất" cho máy chủ cơ sở dữ liệu của mình tại tools.percona.com/wizard
Stephen Senkomago Musoke

Câu trả lời:


5

Vì bạn đang chạy MySQL 5.5, bạn có thể muốn xem xét việc định cấu hình InnoDB để truy cập nhiều lõi

Dưới đây là các cài đặt bạn nên sử dụng

innodb_thread_concurrency đặt giới hạn trên cho số lượng luồng đồng thời mà InnoDB có thể giữ mở. Số vòng tốt nhất để đặt cho điều này là (2 X Số lượng CPU) + Số lượng đĩa. CẬP NHẬT : Khi tôi đã học trực tiếp từ Hội nghị Percona NYC, bạn nên đặt giá trị này thành 0 để cảnh báo InnoDB Storage Engine để tìm số luồng tốt nhất cho môi trường mà nó đang chạy.

innodb_concurrency_tickets đặt số lượng chủ đề có thể bỏ qua việc kiểm tra đồng thời mà không bị trừng phạt. Sau khi đạt đến giới hạn đó, kiểm tra đồng thời luồng trở lại định mức.

innodb_commit_concurrency đặt số lượng giao dịch đồng thời có thể được cam kết. Vì mặc định là 0, không thiết lập điều này cho phép bất kỳ số lượng giao dịch nào được cam kết đồng thời.

innodb_thread_s ngủ_delay đặt số mili giây mà một chuỗi InnoDB có thể không hoạt động trước khi nhập lại hàng đợi InnoDB. Mặc định là 10000 (10 giây).

innodb_read_io_threadsinnodb_write_io_threads (cả kể từ MySQL 5.1,38) phân bổ số lượng chủ đề được chỉ định để đọc và ghi. Mặc định là 4 và tối đa là 64.

innodb numplication_delay áp đặt độ trễ của luồng trên một nô lệ là đạt đến innodb_thread_concurrency.

Đây là những bài viết trước đây của tôi về MySQL 5.5 và kích hoạt nhiều lõi cho InnoDB


2

Percona- Nhà tư vấn hàng đầu về MySQL cung cấp một trình hướng dẫn cấu hình MySQL . Nó cho phép bạn cấu hình my.cnf/my.initùy thuộc vào cấu hình hệ thống của bạn.

Ngoài ra, người Percona đã phát hành một cuốn sách có tên " MySQL hiệu suất cao ". Phiên bản thứ ba được phát hành gần đây và bao gồm điều chỉnh rất chi tiết.


Là những giá trị mà những gì họ đề xuất cho hiệu suất tốt, hay nó chỉ nói ra những gì tôi nhập?
OpenCoderX

1

Sử dụng bộ nhớ: xem http://mysql.rjweb.org/doc.php/memory (Hầu hết các bộ chỉnh âm sẽ không tạo ra đủ sự khác biệt cho vấn đề.)

max_heap_table_size = 4000M là cực kỳ cao! Nếu 4 người dùng cần như vậy, bạn hết RAM và tráo đổi. Trao đổi làm tổn thương hiệu suất nhiều hơn hầu hết mọi thứ.

Các câu hỏi mất hơn một vài giây: Chúng nên được nghiên cứu để cải thiện; vui lòng cung cấp BẢNG TẠO SHOW; HIỂN THỊ BẢNG TÌNH TRẠNG; GIẢI THÍCH


0

Bạn có thể xem xét các lựa chọn otger quá. Chẳng hạn như PostgreSQL trên FreeBSD. Nhưng chuyển từ Windows sang Linux sẽ tăng hiệu suất của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.