2010-06-25 37 views
5

Chúng tôi đã gặp một số vấn đề với máy chủ MySQL của chúng tôi liên tục. Nó tiếp tục ném ra rất nhiều các truy vấn này đồng thời (do đó xếp chồng chúng trong danh sách xử lý của tôi). Chúng tôi đang sử dụng một db MyISAM và kết nối tổng hợp thông qua Glassfish v3 cho một ứng dụng Grails.Tại sao tôi tiếp tục chuyển đổi HEAP sang MyISAM trên máy chủ mysql

DB_USER myhost: 35.143 db Query 39

converting HEAP to MyISAM /* mysql-connector-java-5.1.7 (Revision:) */SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'net_write_timeout' OR Variable_name = 'interactive_timeout' OR Variable_name = 'wait_timeout' OR Variable_name = 'character_set_client' OR Variable_name = 'character_set_connection' OR Variable_name = 'character_set' OR Variable_name = 'character_set_server' OR Variable_name = 'tx_isolation' OR Variable_name = 'transaction_isolation' OR Variable_name = 'character_set_results' OR Variable_name = 'timezone' OR Variable_name = 'time_zone' OR Variable_name = 'system_time_zone' OR Variable_name = 'lower_case_table_names' OR Variable_name = 'max_allowed_packet' OR Variable_name = 'net_buffer_length' OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' OR Variable_name = 'query_cache_size' OR Variable_name = 'init_connect' 

Chúng tôi suy đoán rằng có những bảng tạm thời được tạo ra thông qua GORM (các grails ORM) đang gây ra các truy vấn này. Tại sao tôi tiếp tục chuyển đổi HEAP sang MyISAM trên máy chủ mysql của tôi?

Trả lời

6

Về thông điệp converting HEAP to MyISAM, các answer sau viết:

này xảy ra khi các bảng tạm thời được tạo ra bởi MySQL trong các bước trung gian của quá trình xử lý truy vấn phát triển quá lớn để được lưu trữ trong bộ nhớ. Theo như tôi biết, khi thực hiện điều này, MySQL viết các bảng MyISAM tạm thời bất kể công cụ db bạn sử dụng (nó chỉ là một bảng tạm thời sẽ bị xóa ở cuối truy vấn). Không có vấn đề gì ngoại trừ thời gian quá trình diễn ra.

Giải pháp đơn giản nhất là tăng tmp_table_size, có thể tạm thời nếu bạn đang thực hiện công việc bảo trì. Nếu điều này là không đủ, hãy chia nhỏ các truy vấn của bạn bằng cách sử dụng LIMIT và OFFSET và bước lên OFFSET để bao gồm tất cả các bảng bạn đọc trong truy vấn của bạn. Nếu bạn đang đọc một số bảng lớn trong truy vấn và cần giới hạn từng bảng, đừng quên bao gồm tất cả các kết hợp của bảng: ví dụ: nếu bạn sử dụng HAI bảng và muốn chia từng phần trong ba phần, bạn sẽ cần lặp lại truy vấn OFFSET-ted SIX lần với các kết hợp khác nhau của các giá trị tăng của OFFSET. Một tập tin thực thi sẽ có sẵn để làm cho tất cả những điều này dễ dàng hơn.

Vì vậy, MySQL đang tạo các bảng trong bộ nhớ này (và có khả năng chuyển đổi chúng thành bảng MyISAM tạm thời), không phải Grails. Nhưng sự hiểu biết của tôi là chúng có thể là kết quả của các truy vấn quá nặng.

+0

Thêm: Bit bắt đầu bằng nhận xét xuất hiện từ Connector-J khi kết nối mới được thực hiện. (Đó là trong com.mysql.jdbc.ConnectionImpl # loadServerVariables nếu bạn muốn xem.) Nếu bạn nhìn thấy rất nhiều trong số chúng, tôi sẽ kiểm tra kỹ xem kết nối tổng hợp có hoạt động như bạn mong đợi hay không và MySQL được cấu hình cho một số kết nối thích hợp. –

+0

Tôi vẫn còn thông báo tthis khi chạy truy vấn heacy trên một bảng đó là MyISAM. Vậy heap đến từ đâu? – chiliNUT

Các vấn đề liên quan