Dalam MySQL apa arti "Overhead", apa yang buruk tentang hal itu, dan bagaimana cara memperbaikinya?

157

pertanyaan sederhana, tetapi sudah mengganggu saya untuk sementara waktu sekarang ....

apa itu "overhead" di MySQL, dan haruskah saya khawatir?

tidak mengklik "optimalkan tabel" untuk memperbaikinya?

Johnnietheblack
sumber

Jawaban:

147

Tampaknya overhead adalah ruang disk sementara yang digunakan database untuk menjalankan beberapa kueri, jadi Anda hanya perlu khawatir jika ini menjadi sangat tinggi.

Anda dapat membandingkan 'Mengoptimalkan tabel' dengan defragmenting hard drive Anda.

Saya mengutip:

Setiap basis data akan, dari waktu ke waktu, memerlukan beberapa bentuk pemeliharaan agar tetap pada tingkat kinerja yang optimal . Membersihkan baris yang dihapus, menyeimbangkan ulang, mengompresi, mengelola jalur indeks, mendefragmentasi, dll. Adalah apa yang dikenal sebagai OPTIMISASI di mysql dan istilah lainnya di basis data lain. Sebagai contoh, IBM DB2 / 400 menyebutnya REORGANISE ANGGOTA FISIK.

Ini seperti mengganti oli di mobil Anda atau menyetel. Anda mungkin berpikir Anda tidak perlu melakukannya, tetapi dengan melakukannya mobil Anda berjalan jauh lebih baik, Anda mendapatkan jarak tempuh yang lebih baik, dll. Mobil yang mendapatkan banyak jarak tempuh memerlukan penyetelan lebih sering. Basis data yang menggunakan banyak membutuhkan hal yang sama. Jika Anda melakukan banyak operasi UPDATE dan / atau HAPUS, dan terutama jika tabel Anda memiliki kolom panjang variabel (VARCHAR, TEXT, dll.), Anda perlu terus memantau.

Jasper
sumber
1
@Jasper Apakah tabel sepenuhnya terkunci (tidak dapat membaca / menulis) selama durasi optimasi?
Pacerier
4
Dari mana kutipan itu berasal? Saya menemukan banyak hasil di Google.
Ian Hunter
bagaimana kita tahu yang menyebabkan overhead berulang kali?
mahen3d
terima kasih untuk contoh sempurna dan mudah, terlepas dari istilah teknis yang aneh.
shyammakwana.me
1
Apa yang dianggap "Sangat Tinggi"?
TV-C-15
87

Jika Anda berbicara tentang hal yang phpMyAdminmemanggil overhead, maka itu ukuran sebenarnya dari tabel data relatif terhadap ukuran ideal dari datafile yang sama (seolah-olah ketika baru saja dipulihkan dari cadangan).

Untuk alasan kinerja, MySQLjangan memadatkan file data setelah menghapus atau memperbarui baris.

Ini overheadburuk untuk pemindaian tabel, yaitu ketika kueri Anda perlu menjalankan lebih dari semua nilai tabel, itu perlu melihat lebih banyak ruang kosong.

Anda dapat menyingkirkannya overheaddengan menjalankan OPTIMIZE TABLEyang akan memadatkan tabel dan indeks Anda.

Quassnoi
sumber
7
Ukuran dokumentasi mysql mengatakan "OPTIMIZE TABLE harus digunakan jika Anda telah menghapus sebagian besar tabel atau jika Anda telah membuat banyak perubahan pada tabel dengan baris panjang variabel", ini adalah kasus saya, terima kasih :)
boclodoa
8

Overhead adalah Data_free dari sebuah tabel, yaitu Jumlah byte yang dialokasikan tetapi tidak digunakan. Kita dapat menemukannya dengan perintah SQL SHOW TABLE STATUS . Ini adalah ruang kosong dalam ukuran yang dialokasikan untuk meja Anda.

Shankar Prakash G
sumber
1

Optimize table bisa sangat bermasalah. Misalnya jika tabel banyak digunakan di situs.

http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

Setelah menghapus sebagian besar tabel MyISAM atau ARCHIVE, atau membuat banyak perubahan pada tabel MyISAM atau ARCHIVE dengan baris panjang variabel (tabel yang memiliki kolom VARCHAR, VARBINARY, BLOB, atau TEXT). Baris yang dihapus dipertahankan dalam daftar yang ditautkan dan operasi INSERT berikutnya menggunakan kembali posisi baris lama. <

Saya yakin saya sudah mengkonfirmasi perilaku ini. Dan tentu saja itu akan sangat berguna.

Thomas Lindegaard Jensen
sumber