Bagaimana cara melihat cache mysql?

Dari Versi 4. 0. 1, server MySQL memiliki fitur Query Cache. Saat digunakan, cache kueri menyimpan teks kueri SELECT bersama dengan hasil terkait yang dikirim ke klien. Jika kueri identik lainnya diterima, server kemudian dapat mengambil hasilnya dari cache kueri alih-alih mem-parsing dan mengeksekusi kueri yang sama lagi

Cache kueri sangat berguna di lingkungan di mana [beberapa] tabel tidak terlalu sering berubah dan Anda memiliki banyak kueri yang identik. Ini adalah situasi umum untuk banyak server web yang menggunakan banyak konten dinamis

Berikut adalah beberapa data kinerja untuk cache kueri [kami mendapatkannya dengan menjalankan rangkaian benchmark MySQL pada Linux Alpha 2x500MHz dengan RAM 2G dan cache kueri 64M]

  • Jika Anda ingin menonaktifkan kode cache kueri, setel query_cache_size=0. Dengan menonaktifkan kode cache kueri, tidak ada overhead yang terlihat. [cache permintaan dapat dikecualikan dari kode dengan bantuan opsi konfigurasi --tanpa-permintaan-cache]

  • Jika semua kueri yang Anda buat sebelumnya sederhana [seperti memilih baris dari tabel dengan satu baris], tetapi masih berbeda sehingga kueri tidak dapat di-cache, biaya tambahan untuk mengaktifkan cache kueri adalah 13%. Ini bisa dianggap sebagai skenario terburuk. Namun, dalam kehidupan nyata, kueri jauh lebih rumit daripada contoh sederhana kami, sehingga biaya overhead biasanya jauh lebih rendah

  • Pencarian setelah satu baris dalam tabel satu baris 238% lebih cepat. Ini dapat dianggap mendekati percepatan minimum yang diharapkan untuk kueri yang di-cache

Bagaimana Cache Kueri Beroperasi

Kueri dibandingkan sebelum parsing. Jadi

SELECT * FROM TABLE

dan

Select * from table
_

dianggap sebagai kueri yang berbeda untuk cache kueri, jadi kueri harus persis sama [byte untuk byte] agar terlihat identik. Selain itu, kueri mungkin terlihat berbeda jika misalnya, satu klien menggunakan format protokol komunikasi baru atau kumpulan karakter yang berbeda dari yang digunakan oleh klien lain.

Kueri yang menggunakan database berbeda, menggunakan versi protokol berbeda, atau rangkaian karakter default dianggap sebagai kueri berbeda dan di-cache secara terpisah

Cache berfungsi untuk SELECT CALC_ROWS. dan PILIH DITEMUKAN_ROWS[ ]. ketik kueri karena jumlah baris yang ditemukan juga disimpan di cache

Jika tabel berubah [INSERT, UPDATE, DELETE, TRUNCATE, ALTER, atau DROP TABLE. DATABASE], semua kueri dalam cache yang menggunakan tabel ini [mungkin melalui tabel MRG_MyISAM. ] menjadi tidak valid dan dihapus dari cache

Tabel InnoDB transaksional yang telah diubah akan dibatalkan saat COMMIT dilakukan

Kueri tidak dapat di-cache jika berisi salah satu dari fungsi ini

Fungsi

Fungsi

Fungsi

Fungsi

Fungsi yang Ditentukan Pengguna

CONNECTION_ID

DITEMUKAN_ROWS

DAPATKAN_KUNCI

RELEASE_LOCK

LOAD_FILE

MASTER_POS_WAIT

SEKARANG

SYSDATE

CURRENT_TIME- STAMP

CURDATE

TANGGAL SEKARANG

KURTIME

WAKTU SAAT INI

DATABASE

ENKRIP [dengan satu parameter]

LAST_INSERT_ID

RAND

UNIX_TIME- STAMP [tanpa parameter]

PENGGUNA

TOKOH

Kueri juga tidak dapat di-cache jika berisi variabel pengguna, atau jika berbentuk SELECT. DALAM MODE BERBAGI atau PILIH * DARI AUTOINCREMENT_FIELD ADALAH NULL [untuk mengambil id penyisipan terakhir - solusi ODBC]

Namun, FOUND ROWS[ ] akan mengembalikan nilai yang benar, meskipun kueri sebelumnya diambil dari cache

Kueri yang tidak menggunakan tabel apa pun, atau dalam kasus di mana pengguna memiliki hak istimewa kolom untuk salah satu tabel yang terlibat, tidak di-cache

Sebelum kueri diambil dari cache kueri, MySQL akan memeriksa apakah pengguna memiliki hak istimewa SELECT untuk semua database dan tabel yang terlibat. Jika tidak demikian, hasil yang di-cache tidak akan digunakan

Konfigurasi Cache Kueri

Cache kueri menambahkan beberapa variabel sistem MySQL untuk mysqld yang dapat diatur dalam file konfigurasi, pada baris perintah saat memulai mysqld

query_cache_limit

Jangan simpan hasil yang lebih besar dari ini. [Bawaan 1M. ]

query_cache_size

Memori yang dialokasikan untuk menyimpan hasil dari kueri lama. Jika ini 0, cache kueri dinonaktifkan [default]

query_cache_startup_type

Ini dapat diatur [hanya numerik] ke

Pilihan

Keterangan

0

NONAKTIF [jangan menyimpan atau mengambil hasil]

1

AKTIF [cache semua hasil kecuali SELECT SQL_NO_CACHE. kueri]

2

PERMINTAAN [hanya cache PILIH SQL_CACHE. kueri]

Di dalam utas [koneksi], perilaku cache kueri dapat diubah dari default. Sintaksnya adalah sebagai berikut

SQL_QUERY_CACHE_TYPE = OFF | ON | DEMAND
SQL_QUERY_CACHE_TYPE = 0   | 1  | 2

Pilihan

Keterangan

0 atau MATI

Jangan menyimpan atau mengambil hasil

1 atau AKTIF

Cache semua hasil kecuali SELECT SQL_NO_CACHE. kueri

2 atau PERMINTAAN

Cache hanya PILIH SQL_CACHE. kueri

SQL_QUERY_CACHE_TYPE bergantung pada nilai query_cache_startup_type saat utas dibuat. Ini defaultnya

Opsi Cache Kueri di SELECT

Ada dua kemungkinan parameter terkait cache kueri yang dapat ditentukan dalam kueri SELECT

Pilihan

Keterangan

SQL_CACHE

Jika SQL_QUERY_CACHE_TYPE adalah DEMAND, izinkan kueri untuk di-cache. Jika SQL_QUERY_CACHE_TYPE AKTIF, ini adalah defaultnya. Jika MYSQL QUERY_CACHE_TYPE MATI, jangan lakukan apa pun

SQL_NO_CACHE

Jadikan kueri ini tidak dapat di-cache jangan izinkan kueri ini disimpan di cache

Permintaan Status Cache dan Pemeliharaan

Dengan perintah FLUSH QUERY CACHE Anda dapat mendefrag cache kueri untuk memanfaatkan memorinya dengan lebih baik. Perintah ini tidak akan menghapus kueri apa pun dari cache. FLUSH TABLES juga menghapus cache kueri

Perintah RESET QUERY CACHE menghapus semua hasil kueri dari cache kueri

Anda dapat memantau kinerja cache kueri di SHOW STATUS

Variabel

Keterangan

Qcache_queries_in_cache

Jumlah kueri yang terdaftar di cache

Qcache_inserts

Jumlah kueri yang ditambahkan ke cache

Qcache_hits

Jumlah hit cache

Qcache_not_cached

Jumlah kueri non-cache [tidak dapat di-cache, atau karena SQL_QUERY_CACHE_TYPE]

Qcache_free_memory

Jumlah memori kosong untuk cache kueri

Qcache_total_blocks

Jumlah total blok dalam cache kueri

Qcache_free_blocks

Jumlah blok memori bebas dalam cache kueri

Jumlah total kueri = Qcache_inserts + Qcache_hits + Qcache_not_cached

Cache kueri menggunakan blok dengan panjang variabel, sehingga Qcache_total_blocks dan Qcache_free_blocks dapat mengindikasikan fragmentasi memori cache kueri. Setelah FLUSH QUERY CACHE hanya tersisa satu blok kosong [besar].

Catatan. Setiap kueri memerlukan minimal dua blok [satu untuk teks kueri dan satu atau lebih untuk hasil kueri]. Juga, setiap tabel yang digunakan oleh kueri membutuhkan satu blok, tetapi jika dua atau lebih kueri menggunakan tabel yang sama, hanya satu blok yang perlu dialokasikan.

Bagaimana cara memeriksa cache di MySQL?

Untuk memastikan MySQL Query Cache diaktifkan gunakan. mysql> TAMPILKAN VARIABEL SEPERTI 'have_query_cache'; Untuk memantau statistik cache kueri, gunakan. mysql> TAMPILKAN STATUS SEPERTI 'Qcache%';

Apakah tampilan MySQL di-cache?

MySQL menggunakan cache kuerinya sendiri . Katakanlah, kami memiliki tabel dengan 1 juta baris, Anda menanyakannya seperti pilih count[*] - kali pertama akan lambat, kali kedua akan instan karena akan menarik data yang di-cache. Aturan yang sama berlaku untuk tampilan, dengan perbedaan bahwa MySQL tidak meng-cache hasil subpilihan.

Apakah ada cache di MySQL?

Pengantar Cache Kueri . Ini membandingkan kueri masuk yang dimulai dengan SEL ke tabel hash, dan jika ada kecocokan mengembalikan hasil dari eksekusi kueri sebelumnya. The MySQL query cache is a query results cache. It compares incoming queries that start with SEL to a hash table, and if there is a match returns the results from the previous execution of the query.

Bagaimana cara menghapus cache kueri di MySQL?

Perawatan dan Status Cache Kueri . Perintah ini tidak akan menghapus kueri apa pun dari cache. FLUSH TABLES juga menghapus cache kueri. Perintah RESET QUERY CACHE menghapus semua hasil kueri dari cache kueri. FLUSH QUERY CACHE command you can defragment the query cache to better utilise its memory. This command will not remove any queries from the cache. FLUSH TABLES also flushes the query cache. The RESET QUERY CACHE command removes all query results from the query cache.

Bài mới nhất

Chủ Đề