MySQL - memaksa untuk tidak menggunakan cache untuk menguji kecepatan permintaan


343

Saya sedang menguji kecepatan beberapa pertanyaan di MySQL. Basis data sedang meng-cache kueri ini sehingga menyulitkan saya untuk mendapatkan hasil yang dapat diandalkan saat menguji seberapa cepat kueri ini.

Apakah ada cara untuk menonaktifkan caching untuk kueri?

Sistem: MySQL 4 di webhosting Linux, saya memiliki akses ke PHPMyAdmin.

Terima kasih

mysql 

Jawaban:


527

Coba gunakan opsi SQL_NO_CACHE (MySQL 5.7) dalam permintaan Anda. (Pengguna MySQL 5.6 klik DI SINI )

misalnya.

SELECT SQL_NO_CACHE * FROM TABLE

Ini akan menghentikan hasil caching MySQL, namun perlu diketahui bahwa cache OS dan disk lainnya juga dapat memengaruhi kinerja. Ini lebih sulit untuk berkeliling.



4
Artikel bagus tentang cache Query mysql. Cara mengatur dan melihat cache beraksi! Layak dibaca. databasejournal.com/features/mysql/article.php/3110171/...
Adrian P.

1
Sebelum mencoba meningkatkan kinerja, coba mulai ulang server mysql Anda. Mungkin beberapa proses mempengaruhi segalanya. Itu terjadi pada saya. Meskipun ini adalah komentar yang tidak memiliki koneksi langsung dengan masalah ini, ini dapat membantu banyak orang.
dellasavia

2
Ini menghentikannya dari caching hasil tetapi apakah itu juga menghentikannya dari menggunakan cache?
Brett

3
@ Brett lihat komentar SalmanPK kembali pada '11. Halaman dokumen itu secara harfiah 4 kalimat dan menjawab pertanyaan Anda secara langsung. Seandainya halaman tersebut dihapus di masa depan: "Itu tidak memeriksa cache kueri untuk melihat apakah hasilnya sudah di-cache, atau apakah itu cache hasil kueri."
maurice

121

Alternatif lain yang hanya memengaruhi koneksi saat ini:

SET SESSION query_cache_type=0;

Salahku. Itu yang query_cache_sizesaya lihat, bukan query_cache_type. Saya mencampur jawaban Anda dan SeniorDev.
Mike


30

Ada juga opsi konfigurasi: query_cache_size = 0

Untuk menonaktifkan cache permintaan saat startup server, atur variabel sistem query_cache_size ke 0. Dengan menonaktifkan kode cache query, tidak ada overhead yang terlihat. Jika Anda membuat MySQL dari sumber, kemampuan cache kueri dapat dikecualikan dari server sepenuhnya dengan menjalankan konfigurasi dengan opsi --without-query-cache.

Lihat http://dev.mysql.com/doc/refman/5.1/en/query-cache.html


24

Anda juga dapat menjalankan perintah ikuti untuk mereset cache permintaan.

RESET QUERY CACHE

9
Ini mungkin berlebihan ... idealnya, Anda hanya ingin MySQL untuk sementara waktu mengabaikan cache.
BMiner

3
Anda juga memerlukan izin khusus untuk ini.
Erick Robertson

19

Satu masalah dengan

SELECT SQL_NO_CACHE * FROM TABLE

metode adalah bahwa hal itu tampaknya hanya mencegah hasil caching Anda tidak di-cache. Namun, jika Anda meminta basis data yang secara aktif digunakan dengan permintaan yang ingin Anda uji, maka klien lain mungkin akan men-cache permintaan Anda, yang memengaruhi hasil Anda. Saya terus mencari cara untuk mengatasi ini, akan mengedit posting ini jika saya mengetahuinya.


1
Tetapi jika cache Anda diisi oleh orang lain, Anda akan mendapatkan ilusi menjadi cepat. Namun terkadang tidak.
karatedog

14

Saya akan menggunakan yang berikut ini:

SHOW VARIABLES LIKE 'query_cache_type';
SET SESSION query_cache_type = OFF;
SHOW VARIABLES LIKE 'query_cache_type';

3

Menggunakan variabel yang ditentukan pengguna dalam kueri membuat kueri ulang tidak mudah diakses. Saya menemukan indikator yang jauh lebih baik daripada menggunakan SQL_NO_CACHE. Tetapi Anda harus meletakkan variabel di tempat di mana pengaturan variabel tidak akan memengaruhi kinerja:

SELECT t.*
FROM thetable t, (SELECT @a:=NULL) as init;

3
"Saya menemukan itu indikator yang jauh lebih baik daripada menggunakan SQL_NO_CACHE." Bagaimana? Tampaknya Anda perlu kasus yang cukup kuat untuk menggunakan peretasan yang tidak jelas atas kata kunci eksplisit, kecuali kata kunci eksplisit tidak melakukan apa yang diklaimnya.
Air

1
@ Air, saya menemukan solusi ini bekerja lebih baik daripada SQL_NO_CACHE juga. SQL_NO_CACHE bekerja untuk pertama kalinya menjalankan kueri, tetapi kemudian setelah itu tidak berfungsi lagi. Saya berasumsi ini disebabkan oleh mekanisme caching lainnya. Saya pikir ini berfungsi lebih baik karena pencarian yang bergantung pada variabel tidak dapat di-cache oleh lapisan atau mekanisme apa pun - setidaknya, itulah tebakan terbaik saya.
Klik

2

Jika Anda ingin menonaktifkan cache Query, atur 'query_cache_size' ke 0 di file konfigurasi mysql Anda. Jika set 0 mysql tidak akan menggunakan cache kueri.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.