Bagaimana cara membuat kueri lambat di mysql secara artifisial?

15

Saya memberikan presentasi dalam beberapa minggu. Bagian dari demo ini adalah untuk pemecahan masalah mysql dasar termasuk penggunaan log kueri lambat. Saya telah membuat database dan menginstal aplikasi kami tetapi ini adalah database yang bersih dan karenanya sulit untuk menghasilkan masalah yang cukup.

Saya sudah mencoba yang berikut ini untuk mendapatkan kueri di log kueri lambat:

Setel waktu kueri lambat ke 1 detik.

Beberapa indeks terhapus.

Menekan sistem:

stress --cpu 100 --io 100 --vm 2 --vm-bytes 128M --timeout 1m

Membuat skrip beberapa panggilan halaman web dasar menggunakan wget.

Tidak satu pun dari ini yang menghasilkan permintaan lambat. Apakah ada cara lain untuk secara buatan menekankan database untuk menghasilkan masalah? Saya tidak memiliki cukup keterampilan untuk menulis Jmeter kompleks atau generator beban lainnya. Saya berharap mungkin untuk sesuatu yang tertanam dalam mysql atau trik linux lain di luar tekanan.

Ras abu-abu
sumber
1
+1 Untuk meminta mendapat qury lambat. Kalau saja begini dalam kasus nyata: D
red

Jawaban:

5

Lihat mysqlslap . Anda dapat melewati salah satu kueri aplikasi web Anda dengan --query dan menentukan klien bersamaan dengan --concurrency.

HTTP500
sumber
Ini bekerja paling baik ... menggunakan ini dan kombinasi dari penghapusan basis data.
Gray Race
34

Benar-benar buatan tetapi Anda dapat menggunakan sleep()fungsinya:

select sleep(10);

Dalam log:

Time                 Id Command    Argument
# Time: 110629 16:19:13
# User@Host: mysql[mysql] @ localhost []
# Query_time: 10.000218  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1309389553;
select sleep(10);
Mark Wagner
sumber
Terima kasih atas sarannya ... Itu membuat log tumbuh, tapi saya ingin mereka menjadi permintaan yang sah untuk aplikasi. Dengan cara ini saya dapat demo menjelaskan dan alat diagnostik lainnya.
Gray Race
:) Hmm ... mungkin strategi LOCK TABLESakan berhasil. Itu mungkin terlalu kotor juga.
Mark Wagner
1
Biasanya pilih * from ((pilih * dari database) x) dan terus mendapatkan lebih banyak dan lebih recrusive melakukan trik untuk saya.
alexyorke
Gunakan DO SLEEP(10);jika Anda tidak ingin hasil SLEEP dalam kueri Anda.
Rasmus Friis Kjeldsen
1

Mungkin menghapus pengaturan basis data mungkin membantu? Misalnya mengurangi ukuran key_buffers?

agy
sumber