Tại sao MySQL lại tạo ra nhiều bảng tạm thời trên đĩa như vậy?


13

Có thể có bất kỳ lỗi cấu hình nào dẫn đến việc tạo quá nhiều bảng tạm thời bằng bộ điều chỉnh mysql..mysql không

Current max_heap_table_size = 200 M
Current tmp_table_size = 200 M
Of 17158 temp tables, 30% were created on disk

table_open_cache = 125 tables
table_definition_cache = 256 tables
You have a total of 97 tables
You have 125 open tables.
Current table_cache hit rate is 3%

Bảng tạm thời trước đó là "trong số 23725 bảng tạm thời 38% đã được tạo trên đĩa" nhưng tôi đã thay đổi max_heap và tmp_table thành 200m từ 16m và nó giảm xuống 30% ..

Cấu hình:

engine myisam 
group_concat_max_len = 32768
key_buffer_size = 3.7 GB,
thread_stack = 256k,
table_cache = 125
query_cache_limit = 1M
query_cache_size = 16M
join_buffer_size = 2.00 M
max_connections = 800

Một hệ thống khác có cấu hình mặc định đang hiển thị "trong số 23725 bảng tạm thời, 1% được tạo trên đĩa" với cùng một cơ sở dữ liệu.

Tôi đã thử thay đổi mặc định trên máy với vấn đề này và nó vẫn hiển thị "Trong số 580 bảng tạm thời, 16% đã được tạo trên đĩa".

Tôi đang sử dụng Ubuntu 11.4 64 bit với ram 48 gb. Có ai có thể đề xuất một giải pháp?

Việc thay đổi công cụ db từ "myisam" thành "bộ nhớ" trên các bảng bằng cách sử dụng "nhóm bằng" sẽ khắc phục điều này? Như đã giải thích ở đây: http://www.mysqlperformanceblog.com/2007/08/16/how-much-overhead-is-caused-by-on-disk-t tạm-tests /

Câu trả lời:


16

mysqltuner hiếm khi cung cấp bất kỳ thông tin hữu ích. Nó sử dụng hầu hết các số liệu thống kê không liên quan về "tỷ lệ trúng" và đặt giới hạn tùy ý về số lượng vật dụng có thể chấp nhận được. Nếu bạn không phải đối mặt với một vấn đề về hiệu suất, thì bạn thực sự không cần phải giải quyết bất kỳ vấn đề nào mà nó gây ra cho bạn. Điều đó đang được nói, đây là một ít thông tin cơ bản về các bảng tạm thời ...

MySQL bên trong sử dụng công cụ lưu trữ MEMOR để tạo các bảng tạm thời ẩn. Trên các bảng tạm thời trên đĩa sử dụng công cụ lưu trữ MyISAM.

Các bảng tạm thời được tạo trên đĩa khi:

  • Các trường văn bản hoặc BLOB có mặt (vì MEMOR không hỗ trợ các loại này)
  • kích thước của bảng tạm thời ẩn kết quả vượt quá ít hơn tmp_table_sizehoặcmax_heap_table_size
  • Nếu một cột có hơn 512 byte được sử dụng với NHÓM THEO hoặc UNION hoặc ĐẶT HÀNG B BYNG

Đọc Tài liệu MySQL trên các Bảng tạm thời nội bộ để biết thêm chi tiết.

bạn có thể làm gì về điều này? Giả sử rằng nó thực sự đại diện cho một vấn đề hiệu suất (thay vì chỉ làm phiền bạn về mặt trực quan):

  • Tránh các trường TEXT / BLOB và thay vào đó sử dụng các trường VARCHAR hoặc CHAR có kích thước phù hợp nếu có thể.
  • Nếu không thể tránh khỏi văn bản / BLOB, hãy sắp xếp chúng để tách các bảng có mối quan hệ khóa ngoài và chỉ THAM GIA khi bạn cần chúng.
  • Xử lý các cột lớn, hơn 512 byte như các trường văn bản / BLOB đã đề cập ở trên.
  • Đảm bảo rằng các truy vấn của bạn chỉ trả về tập kết quả bạn cần (các mệnh đề WHERE được chọn một cách thích hợp, tránh CHỌN *)
  • Tránh các truy vấn con và thay thế chúng bằng các phép nối, đặc biệt nếu chúng trả về tập kết quả lớn
  • Phương sách cuối cùng - nâng cao cả hai tmp_table_sizemax_heap_table_size. Đừng làm điều này trừ khi bạn thấy rằng các truy vấn của bạn không thể được tối ưu hóa.

Nếu bạn lo lắng về cấu hình MySQL của mình và không thoải mái với các cài đặt có sẵn, bạn có thể muốn xem Trình hướng dẫn cấu hình Percona làm điểm bắt đầu.

Việc thay đổi công cụ db từ "myisam" thành "bộ nhớ" trên các bảng bằng cách sử dụng "nhóm bằng" sẽ khắc phục điều này? như đã giải thích ở đây

Không, nó sẽ không và nó sẽ làm cho nó sao cho các bảng của bạn không bao giờ tồn tại trên đĩa. Đừng làm điều này.


+1, nhưng thêm vào đó là ít hơn tmp_table_sizehoặcmax_heap_table_size
Derek Downey

Đề xuất tốt nhất của mysqltuner là kích hoạt nhật ký truy vấn chậm. Nó sẽ giúp bạn xác định các truy vấn chậm nếu có.
fat_mike

2

"Sử dụng tạm thời" và "sử dụng tập tin" không phải là kết thúc của thế giới!

CHỌN ... NHÓM THEO a, b ĐẶT HÀNG B cNG c, d - Yêu cầu 1 hoặc 2 "bảng tạm thời".

Đơn giản là khi truy vấn của bạn sẽ sử dụng bảng tạm thời. Các bảng tạm thời có thể làm chậm một truy vấn bởi một yếu tố nhỏ. Nhưng nếu truy vấn vẫn "đủ nhanh" thì đừng lo lắng về nó.

Nếu truy vấn quá chậm (có hoặc không có bảng tmp), hãy thảo luận về nó. Vui lòng cung cấp SHOW CREATE TABLE, SHOW TABLE STATUS và EXPLAIN.


1
Nếu bạn có một chỉ mục trên (a, b, c, d), sẽ không có bảng tạm thời.
Yvan
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.