Có phải là xấu khi tạo nhiều bảng tạm thời mysql không?


8

Tôi cần thực hiện phân tích thống kê nặng để cung cấp một số dữ liệu cho người dùng. Hiện tại, tôi bắt dữ liệu từ mysql và xử lý chúng thông qua PHPcác mảng. Tuy nhiên, các bảng tạm thời của mysql khá tốt hơn (cực kỳ hiệu quả và nhanh hơn các mảng PHP; rõ ràng là do cơ chế của chúng).

Giải pháp dự kiến ​​của tôi là lập một bảng tạm thời theo từng yêu cầu (nghĩa là kết nối) để nhập và xử lý dữ liệu. Tuy nhiên, tôi không chắc chắn liệu có một nhược điểm cho việc tạo nhiều bảng tạm thời không?

Điều này có thể gây ra vấn đề cho máy chủ mysql không? Hoặc tôi có thể sử dụng nó như là một thay thế cho mảng PHP trong nhiều yêu cầu đồng thời?

Câu trả lời:


6

Bạn muốn ngăn việc tạo bảng tạm thời càng nhiều càng tốt: Ngăn chặn sao chép vào bảng tạm thời (sql)

Chúng không hoạt động tốt trong Bản sao MySQL: Các binlog được cập nhật cho các bảng tạm thời của MySQL như thế nào?

Vì các bảng tạm thời là một thực tế của cuộc sống trong thế giới DB, bạn có thể phải thực hiện một số thay đổi không chính thống để phù hợp với sự tồn tại của chúng.

Thông thường, mysqld có thói quen đặt các bảng tmp vào /tmphoặc bất cứ nơi nào tmpdir được cấu hình. Đó thường là trên một số đĩa không nghi ngờ nghèo.

Một cách khác thú vị là thiết lập đĩa RAM và cấu hình lại tmpdir để sử dụng nó

BƯỚC 01: Tạo điểm gắn kết cho đĩa RAM

mkdir /var/tmpfs

BƯỚC 02: Thêm đĩa RAM vào / etc / fstab (16GB)

echo "none   /var/tmpfs              tmpfs   defaults,size=16g        1 2" >> /etc/fstab

BƯỚC 03: Thêm dòng này vào /etc/my.cnf

[mysqld]
tmpdir=/var/tmpfs

BƯỚC 04: Kích hoạt đĩa RAM

Bạn có thể làm một trong những điều sau đây:

  1. Chỉ cần khởi động lại máy chủ DB
  2. mount -t tmpfs -o size=16g none /var/tmpfs

Trước khi bạn làm điều này, hãy chắc chắn rằng bạn có đủ RAM

Hãy thử một lần !!!


2
Các bảng tạm thời ẩn không có tác động đến sao chép, cho dù SBR hay RBR. Các bảng tạm thời rõ ràng gửi tất cả các DDL qua dây.
Rick James

4

"Nhiều bảng tạm thời mysql" - Các vấn đề tiềm ẩn:

  • table_open_cache (và các điều chỉnh khác) - Bạn có thể (nhưng không có khả năng) đạt một số giới hạn
  • Ram bloat - Bạn có thể (nhưng không có khả năng) sử dụng nhiều ram hơn. Nếu điều này dẫn đến trao đổi, điều đó thực sự tồi tệ.

Tôi sẽ không lo lắng về "nhiều" trừ khi bạn thực sự có hàng trăm bảng tạm thời cùng một lúc.

Có bao nhiêu chủ đề (SHOW PROCESSLIST; bỏ qua 'Ngủ') đang chạy cùng một lúc? Ngay cả một hệ thống bận rộn hiếm khi có nhiều hơn 10 cùng một lúc.

Đối với các bảng tạm thời ẩn , hãy xem các CHỌN gây ra chúng; có thể thiết kế lại các truy vấn để tránh các bảng tạm thời.

Tôi không thích sử dụng đĩa ram - nó làm mất RAM khỏi các khả năng lưu trữ khác và có nguy cơ gặp phải giới hạn cứng (kích thước đĩa).

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.