QUAN SÁT BAN ĐẦU
- ID tiến trình 42686 cho biết nó đang chuẩn bị thực hiện truy vấn CHỌN
- Có một số kết nối ngủ
- Tất cả các quy trình khác không thể có được khóa bảng
- Tôi đã mong đợi một CẬP NHẬT, XÓA hoặc XÁC NHẬN để thực hiện khóa. Không có quyền sở hữu của bảng trong câu hỏi.
- Không thể nhìn thấy các truy vấn đầy đủ trong quá trình ID 42.686, nhưng tôi nghi ngờ nó liên quan đến một
JOIN
, GROUP BY
hoặcORDER BY
LÝ THUYẾT LÀM VIỆC
Nếu bạn hết dung lượng đĩa với danh sách quy trình bạn đưa cho tôi, thì chúng ta có thể đổ lỗi cho công cụ lưu trữ MyISAM. Tại sao?
Trong trường hợp cụ thể của bạn, nó không phải là một trong các bảng của bạn. Nếu a JOIN
, GROUP BY
hoặc ORDER BY
đang được thực thi và một bảng tạm thời được ghi vào đĩa (trên các bảng tạm thời đĩa sử dụng công cụ lưu trữ MyISAM), MySQL chỉ cần đóng băng khi hết dung lượng. Làm thế nào để tôi biết điều đó?
Theo Hướng dẫn nghiên cứu chứng chỉ MySQL 5.0
Trang 408,409 Mục 29.2 Bulletpoint 11 nói:
Nếu bạn hết dung lượng đĩa trong khi thêm hàng vào bảng MyISAM, sẽ không xảy ra lỗi. Máy chủ tạm dừng hoạt động cho đến khi có chỗ trống, và sau đó hoàn thành thao tác.
Tôi đã thảo luận về tình huống này trước đây
Một cái gì đó cho tôi biết rằng bạn có một trong hai tình huống này
- bảng tạm thời dựa trên đĩa cho các CHỌN của bạn và cạnh tranh không gian với dữ liệu thông thường của bạn
- Nếu bảng tạm thời đang hạ cánh trong
/tmp
phân vùng gốc, thì đó là hết dung lượng
BỀN VỮNG
Gợi ý số 1: Ánh xạ tmpdir sang đĩa khác
[mysqld]
tmpdir = /another/disk/besides/root/partition
Gợi ý số 2: Tạo đĩa RAM
Chạy mã này để cài đặt đĩa RAM có sẵn khi khởi động lại Linux.
RAMDISK_SIZE=32g
service mysql stop
mkdir /var/tmpfs
echo "none /var/tmpfs tmpfs defaults,size=${RAMDISK_SIZE} 1 2" >> /etc/fstab
mount -t tmpfs -o size=${RAMDISK_SIZE} none /var/tmpfs
cp -R /var/lib/mysql/* /var/tmpfs
mv /var/lib/mysql /var/lib/mysql_old
ln -s /var/tmpfs /var/lib/mysql
chown -R mysql:mysql /var/tmpfs
chown -R mysql:mysql /var/lib/mysql
service mysql start
Sau đó, ánh xạ tmpdir tới/var/tmpfs
HÃY THỬ MỘT LẦN !!!
mysqldump
. Bạn đã chạy một bản sao lưu tại thời điểm đó?