Ada beberapa opsi yang dapat menyebabkan tabel temp terwujud sebagai tabel MyISAM atau dapat dikonfigurasi untuk menunda itu. Perlu diingat bahwa untuk tabel temp berbasis disk, tidak ada .frm
file, tapi hanya .MYD
dan .MYI
file (tentu saja. File MYI tidak pernah digunakan karena tidak mungkin indeks tabel suhu internal).
Berikut ini opsinya:
Anda juga harus mempertimbangkan Dokumentasi MySQL tentang Penggunaan Tabel Temp Internal
Situasi di mana tabel temp di memori dibuat
- Jika ada klausa ORDER BY dan klausa GROUP BY berbeda, atau jika ORDER BY atau GROUP BY berisi kolom dari tabel selain dari tabel pertama dalam antrian bergabung, tabel sementara dibuat.
- DISTINCT dikombinasikan dengan ORDER BY mungkin memerlukan tabel sementara.
- Jika Anda menggunakan opsi SQL_SMALL_RESULT, MySQL menggunakan tabel sementara di dalam memori, kecuali kueri juga berisi elemen (dijelaskan nanti) yang memerlukan penyimpanan di-disk.
Ketika tabel temp di dalam memori melebihi minimum (tmp_table_size atau max_heap_table_size), mysqld melakukan hal berikut:
- Tangguhkan kueri
- Menyalin isi tabel di memori ke tabel temp MyISAM
- Buang tabel di dalam memori
- Melanjutkan kueri, mengirimkan data temp ke dalam tabel temp MyISAM
Situasi di mana tabel temp di-memori dilewati demi disk adalah
- Kehadiran kolom BLOB atau TEXT dalam tabel
- Kehadiran kolom apa pun dalam klausa GROUP BY atau DISTINCT lebih besar dari 512 byte
- Kehadiran kolom apa pun yang lebih besar dari 512 byte dalam daftar SELECT, jika UNION atau UNION ALL digunakan
Diperlukan beberapa uji tuntas untuk mengurangi pembuatan tabel temp pada disk
- Pengaturan join_buffer_size lebih besar
- Pengaturan sort_buffer_size lebih besar
- Pengaturan tmp_table_size dan max_heap_table_size lebih besar
- Menyetel kueri untuk meminimalkan atau bahkan mencegah tabel temp
- Membuat indeks untuk membuat tampilan data dari tabel individual
- Menginstal RAM tambahan untuk mengakomodasi tabel temp dalam memori yang besar
Jika setelah uji tuntas semacam itu, masih ada tabel temp yang sedang dibentuk pada Disk, berikut ini adalah satu langkah putus asa: Memetakan pembuatan tabel temp berbasis disk ke memori.
Berikut adalah cara cepat dan kotor untuk mengatur Disk RAM 16GB menggunakan tmpdir
STEP01) Buat Folder Disk RAM
mkdir /var/mysql_tmpfs
LANGKAH02) Tambahkan ini ke my.cnf
[mysqld]
tmpdir=/var/mysql_tmpfs
LANGKAH03) Tambahkan ini ke / etc / fstab
echo "none /var/mysql_tmpfs tmpfs defaults,size=16g 1 2" >> /etc/fstab
LANGKAH04) Muat ulang / etc / fstab
mount -a
LANGKAH05) service mysql restart
Setelah ini, semua tabel temp yang menjadi MyISAM ditulis ke RAM Disk. Ini akan mempercepat pembuatan tabel temp berbasis disk.
Cobalah !!!
filesort
, dan 6405 adalah PID dari mysql untuk menyimpan file temp dari berbagai server yang terpisah.