PENGAMATAN AWAL
- ID Proses 42686 mengatakan sedang bersiap untuk menjalankan kueri SELECT
- Ada beberapa koneksi tidur
- Semua proses lain tidak dapat memperoleh kunci tabel
- Saya mengharapkan UPDATE, DELETE, atau INSERT untuk melakukan kunci. Tidak ada yang mengklaim kepemilikan tabel tersebut.
- Tidak dapat melihat permintaan penuh dalam Proses ID 42.686, tapi aku curiga itu melibatkan
JOIN
, GROUP BY
atauORDER BY
TEORI KERJA
Jika Anda kehabisan ruang disk dengan daftar proses yang Anda berikan kepada saya, maka kita dapat menyalahkan mesin penyimpanan MyISAM. Mengapa?
Dalam kasus khusus Anda, itu bukan salah satu dari tabel Anda. Jika a JOIN
,, GROUP BY
atau ORDER BY
sedang dieksekusi dan tabel temp sedang ditulis ke disk (pada tabel temp disk menggunakan mesin penyimpanan MyISAM) MySQL cukup membeku ketika kehabisan ruang. Bagaimana saya tahu itu?
Menurut Panduan Studi Sertifikasi MySQL 5.0
Halaman 408.409 Bagian 29.2 Bulletpoint 11 mengatakan:
Jika Anda kehabisan ruang disk saat menambahkan baris ke tabel MyISAM, tidak ada kesalahan terjadi. Server menunda operasi sampai ruang tersedia, dan kemudian menyelesaikan operasi.
Saya telah membahas situasi ini sebelumnya
Sesuatu mengatakan kepada saya bahwa Anda memiliki salah satu dari dua situasi ini
- tabel temp berbasis disk untuk SELECT Anda dan bersaing untuk ruang dengan data reguler Anda
- Jika tabel temp masuk
/tmp
di partisi root, itu kehabisan ruang
SARAN
Saran # 1: Map tmpdir ke disk lain
[mysqld]
tmpdir = /another/disk/besides/root/partition
Saran # 2: Buat Disk RAM
Jalankan kode ini untuk menginstal disk RAM yang akan tersedia di Linux reboot.
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
Lalu, petakan tmpdir ke/var/tmpfs
COBALAH !!!
mysqldump
. Apakah Anda menjalankan cadangan pada saat itu?