2010-10-22 36 views
11

Chúng tôi nhận thấy rằng MySQL đang báo cáo số lượng bảng đĩa tạm thời rất cao (trên 10.000) điều này được báo cáo bởi Server Density. Đã cố gắng để hiểu thêm một chút về điều này.Số lượng Cao Bảng Đĩa Tạm thời của MySQL

  • Tại sao bảng tạm thời được tạo bởi MySQL?
  • Tác động của chúng đối với hiệu suất là gì?
  • Họ có bao giờ bị xóa bởi MySQL hoặc con số này sẽ tăng lên không?

Trả lời

15

Bảng tạm thời có thể được tạo vì nhiều lý do. Bất kỳ thao tác chọn nào có tập dữ liệu lớn và yêu cầu sắp xếp sẽ được ghi thành một. Các bảng tạm thời thực tế được tạo bởi các truy vấn trực tiếp (kiểu bảng TEMPORARY) được thực hiện trên cơ sở mỗi kết nối, vì vậy nếu bạn có một kịch bản với 50 kết nối mỗi bảng làm cùng một bảng tạm thời, thì 50 tập tin tạm thời trên đĩa cho chúng . nhóm lý do tạo bảng tạm thời theo thứ tự và khác biệt bởi Đĩa dựa trên i/o là phần đắt nhất của DBMS, nói chung, nếu các bảng này dành cho các tập dữ liệu lớn, có thể bạn đang hạn chế hiệu suất DB so với hệ thống i/o của bạn. Nhưng nói chung, bởi chỉ có sẵn, họ chỉ nhai không gian đĩa và không nhiều khác.

Bảng tạm thời cho mục đích sắp xếp sẽ tự làm sạch khi truy vấn hoàn tất. Bảng tạm thời của loại 'TEMPORARY' sẽ tự làm sạch khi kết nối mà chúng được gắn vào được đóng lại. Nếu bạn đang sử dụng kết nối liên tục, thì các bảng TEMPORARY sẽ dính xung quanh cho đến khi bạn (hoặc một chương trình) DROPs chúng theo cách thủ công.

+0

Tôi hiểu rồi, vì vậy nếu sử dụng kết nối liên tục trên máy chủ bận, chúng tôi có thể thấy giá trị tăng lên với giá trị lớn, nhưng không có gì phải lo lắng? – Tom

+1

phụ thuộc vào cách các bảng được tạo ra. tạo ra một bảng tạm thời 'A' trong một kết nối là tốt. tiếp theo tái sử dụng kết nối sẽ chỉ tái sử dụng cùng một bảng. nhưng nếu bạn đang tạo ra chúng với tên ngẫu nhiên, bạn sẽ bị rò rỉ những bảng tạm thời cho đến khi đóng của kết nối và mysql dọn dẹp. –

+0

Rò rỉ ở đâu, vào đĩa, đến bộ nhớ? – Tom

1

Bạn đã xác định nhiều chỉ mục trên bảng. Bạn đã bao giờ biết cách lập chỉ mục hoạt động chưa?

Chỉ cần một chỉ mục là một bảng tạm thời trong dbase giữ một bản sao của cột được lập chỉ mục được sắp xếp. Khi một hàng mới được chèn, dbase đặt một kỷ lục mới trong bảng tạm thời tại địa điểm chính xác vì vậy một chỉ số đã kết quả như sau:

A) Ưu điểm:

1) Tăng tốc độ tìm kiếm bởi vì bàn được sắp xếp trong một bảng tạm thời dựa trên lĩnh vực lập chỉ mục (s)

B) Nhược điểm:

1) chậm lại (Tạo, Update, Delete) vì cùng một hành động cần được thực hiện trên bảng tạm thời nếu cần thiết.

2) Kích thước DataBase tăng do sử dụng bảng tạm thời.

Kết luận:

Indexing là một sự đánh đổi của kích thước db lớn và chèn chậm hơn và tìm kiếm nhanh chóng với số lượng lớn dữ liệu. Sử dụng lập chỉ mục trên các trường mà bạn thường xuyên gọi chúng là tiêu chí tìm kiếm (WHERE) và loại bỏ các chỉ mục bổ sung để tối ưu hóa thiết kế db của bạn.

6

Trước hết hãy đọc the answer by Marc B Đó là lý do tại sao bạn có nhiều bảng tạm thời. Dù sao, các bảng tạm thời không phải là xấu, điều xấu là "trên đĩa tạm thời bảng" đó là chậm và gây ra nhiều đĩa IO.

Để ngăn chặn một bảng tạm thời được lưu trữ trên đĩa cố gắng làm theo các bước sau:

  • Kiểm tra giá trị của max_heap_table_size biến
  • Kiểm tra giá trị của tmp_table_size biến
  • Kiểm tra tỷ lệ phần trăm của các bảng đĩa trong số tất cả các bảng tạm thời. Chỉ cần so sánh show global status like 'Created_tmp_%tables' hai số này. Nếu tỷ lệ phần trăm không quá lớn - không có gì phải lo lắng.
+0

Giá trị của max_heap_table_size và tmp_table_size giá trị tốt/xấu là gì? – Tom

+0

Nó phụ thuộc rất nhiều dự án của bạn cụ thể. Vì vậy, không có lời khuyên chung về các giá trị. Điều duy nhất tôi có thể đề nghị: chỉ cần tránh các bảng tạm thời trên đĩa. – Vadim

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