Manfaat menjalankan Kueri OPTIMASI TABEL di MySQL DB Server

9

Saya ingin tahu apa saja manfaat [yang benar-benar praktis] yang dapat dituai dengan menjalankan OPTIMIZE TABLE tbl_namekueri di MySQL Server.

Saya memeriksa ini sekali dan menemukan bahwa setelah ini dijalankan, hit DB berikutnya memakan waktu lama mungkin karena relokasi fragmen atau lebih, tetapi hit berikutnya menunjukkan jenis kinerja, saya tidak yakin apakah caching query melakukan trik ini dengan optimasi atau optimasi saja melakukan trik ini.

Adakah yang bisa membimbing saya dengan beberapa nilai perbedaan kinerja nyata jika mungkin sehingga saya dapat mengambil lebih lanjut karena bekerja dengan MySQL semakin meningkat di proyek kami.

Saravanan
sumber

Jawaban:

7

Harap diingat bahwa OPTIMIZE TABLE tidak melakukan defragmentasi. Secara internal, OPTIMIZE TABLE melakukan beberapa operasi (menyalin data ke file temp, membuat ulang indeks, menghitung ulang statistik indeks). Bahkan, contoh yang saya miliki dapat dilakukan secara manual seperti yang ditunjukkan.

Contoh: Jika Anda mengoptimalkan mydb.mytable, Anda memasukkan perintah ini:

OPTIMIZE TABLE mydb.mytable;

Perhatikan bahwa mysql melakukan sesuatu berikut di bawah tenda:

CREATE TABLE mydb.mytable2 LIKE mydb.mytable;
ALTER TABLE mydb.mytable2 DISABLE KEYS;
INSERT INTO mydb.mytable2 SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable2 ENABLE KEYS;
DROP TABLE mydb.mytable;
ALTER TABLE mydb.mytable2 RENAME mydb.mytable;
ANALYZE TABLE mydb.mytable;

Ini cukup berguna untuk tabel yang mengalami UPDATE dan DELETE volume tinggi

Melakukan ini dapat mencapai dua hal

  1. Cegah mysql dari melihat melalui fragmen dalam tabel dalam upaya memuat data ke dalam fragmen berukuran tepat. Menghilangkan fragmen-fragmen ini akan mengurangi operasi ini.

  2. Menghitung ulang statistik indeks membantu Pengoptimal Permintaan MySQL menyusun rencana EXPLAIN yang lebih baik. Jika tidak, kueri dapat menurun dalam waktu pelaksanaan karena Pengoptimal Kueri MySQL memutuskan untuk mengambil tebakan yang salah pada paket EXPLAIN. Ini akan menjadi gejala yang pasti dari tabel yang memiliki volume tinggi UPDATE dan HAPUS.

CAVEAT

Sehubungan dengan caching, caching melakukan penyelaman dengan cepat karena melakukan pemindaian tabel penuh. Untuk halaman indeks MyISAM mengalir masuk dan keluar dari Cache Kunci MyISAM. Untuk InnoDB, halaman data dan indeks mengalir masuk dan keluar dari Pool Buffer InnoDB.

RolandoMySQLDBA
sumber
Terima kasih untuk balasan Anda. Dari sudut pandang Anda, saya mengerti bahwa saya lebih baik menggunakan beberapa layanan seperti pekerjaan cron untuk menjadwalkan tabel mengoptimalkan untuk salah satu tabel saya yang sering diperbarui sehingga saya dapat mencapai kinerja yang lebih baik. Selanjutnya saya menggunakan InnoDB untuk tabel ini. Apakah ini pilihan yang lebih baik? Juga, saya menemukan HASH bergabung dalam SQL Server yang disarankan untuk meningkatkan kinerja permintaan, tolong jelaskan ini untuk saya dan bagaimana cara mendapatkan yang serupa dengan ini di MySQL. Tolong beri saya pengoptimal SQL Query untuk MySQL [versi Windows7].
Saravanan
@savaranan: MySQL Query Optimizer yang saya maksud adalah internal yang dibangun ke dalam MySQL. BTW Karena tabel yang ingin Anda optimalkan adalah InnoDB, Anda dapat melewati langkah DISABLE KEYS dan ENABLE KEYS. Selain itu, TABEL ANALISIS dapat dilewati karena sama sekali tidak berguna pada tabel InnoDB karena InnoDB menghitung ulang kardinalitas tabelnya dengan perkiraan dekat menggunakan halaman dari indeks BTREE, yang dikenal sebagai penyelaman indeks.
RolandoMySQLDBA
@savaranan: Sejauh indeks HASH berjalan, InnoDB memiliki indeks hash adaptif ( dev.mysql.com/doc/refman/5.5/id/innodb-adaptive-hash.html ). Ada juga saran bagus untuk meniru indeks hash Anda sendiri dan menangani tabrakan berdasarkan halaman 103-106 dari "MySQL Kinerja Tinggi" ( amazon.com/dp/0596101716 )
RolandoMySQLDBA