Apa itu utas di mysql?

Kueri per detik (QPS) mengukur throughput database, tetapi tidak mencerminkan seberapa keras MySQL bekerja. Yang terakhir ini diukur dengan , dinyatakan sebagai pengukur (sedangkan QPS adalah tingkat). Sebelum membahas Threads_running, mari pertimbangkan analogi

Apa itu utas di mysql?

Gambar di atas adalah kluster instrumen digital dari sebuah mobil. Lingkaran besar di sebelah kiri adalah speedometer, dan lingkaran besar di sebelah kanan adalah tachometer. Spedometer sudah tidak asing lagi bagi sebagian besar orang. mereka menunjukkan seberapa cepat mobil itu melaju. Di atas speedometer terbaca 84 km/jam. Tachometer adalah umum tetapi tidak disertakan di setiap kluster instrumen. Mereka menunjukkan seberapa keras mesin bekerja, diukur dalam putaran per menit (RPM). Di atas, tachometer membaca di bawah 3.000 RPM. ("M3" di tengah tachometer adalah gigi transmisi. Kita bisa mengabaikan itu. )

QPS analog dengan kecepatan (84 km/j), dan Threads_running analog dengan RPM (~3k RPM)

Kecepatan dan RPM sangat bervariasi karena banyak faktor. akselerasi dan deselerasi, menanjak atau menurun, headwind atau tailwind, dan (semakin banyak pada mobil baru) pemrograman komputer untuk mengoptimalkan penghematan bahan bakar. Akibatnya, kecepatan yang sama dapat dicapai pada RPM yang berbeda, tetapi biasanya mobil membakar lebih sedikit bahan bakar pada RPM rendah dan lebih banyak bahan bakar pada RPM tinggi. Juga, RPM yang lebih tinggi berarti tekanan yang lebih besar pada mesin yang meningkatkan kemungkinan kerusakan mekanis. Kami peduli dengan pembakaran bahan bakar dan kegagalan mekanis karena keduanya merugikan kami. Inilah sebabnya mengapa mobil memiliki takometer. RPM adalah metrik penting

QPS dan Threads_running juga sangat bervariasi karena banyak faktor. spesifikasi perangkat keras (inti dan kecepatan CPU, jenis penyimpanan dan IOP, dll. ), jenis kueri (baca vs. tulis), rencana kueri, ukuran tabel, ukuran baris, skema tabel (tipe kolom, indeks—terutama indeks), pola akses data (semua bacaan vs. semua menulis. vs. campuran), "tetangga berisik", waktu hari (mis. g. jam kerja), waktu tahun (mis. g. musim pajak), promo khusus, aktor jahat, isi ulang—sebutkan saja. Akibatnya, seperti mobil, QPS yang sama dapat dicapai pada Threads_running yang berbeda, jadi ini adalah metrik yang penting

Threads_running menunjukkan seberapa keras MySQL bekerja. Beberapa database tempat saya bekerja melakukan 10.000 QPS dengan hanya 10 utas yang berjalan. Yang lain kesulitan melakukan 3.000 QPS dengan 100 utas berjalan. Dari paragraf sebelumnya kita tahu alasannya. faktor yang bervariasi

QPS sendiri tidak dapat memberi tahu kami apakah MySQL hampir tidak menekankan sistem atau jika, secara kiasan, itu mulai membakar minyak dan terhenti

Sangat penting untuk memantau dan menangani Threads_running yang tinggi. Tachometer memiliki nilai maksimum yang biasanya tidak dapat Anda dorong melebihi mobil, tetapi MySQL sangat ambisius. itu tidak memiliki nilai maksimum dan akan mencoba menjalankan utas sebanyak yang diperlukan. Ini akan mencoba, tetapi akan melambat dan akhirnya gagal saat Threads_running meningkat

Threads_runningMySQL0 - 10Normal. tidak ada masalah untuk hampir semua perangkat keras10 - 30Sibuk. biasanya ok untuk sebagian besar perangkat keras karena server modern memiliki inti CPU sebanyak 30 - 50 Tinggi. sangat sedikit beban kerja yang membutuhkan banyak utas ini berjalan. Ini dapat berfungsi untuk ledakan berkelanjutan (<5 menit), tetapi waktu respons kemungkinan besar tidak dapat diterima jika dipertahankan dalam jangka panjang. 50 - 100Terlalu banyak beban. beberapa perangkat keras dapat menangani ini, tetapi jangan berharap untuk beroperasi dengan sukses dalam kisaran ini. Semburan sesaat (< 5 dtk) dalam kisaran ini biasanya baik untuk perangkat keras lokal produksi kami. > 100Gagal. dalam kasus yang jarang terjadi, MySQL dapat menjalankan > 100 utas, tetapi diperkirakan gagal dalam kisaran iniKelebihan beban . beberapa perangkat keras dapat menangani ini, tetapi jangan berharap untuk beroperasi dengan sukses dalam kisaran ini. Semburan sesaat (< 5 dtk) dalam kisaran ini biasanya baik untuk perangkat keras lokal produksi kami. > 100 Gagaldalam kasus yang jarang terjadi, MySQL dapat menjalankan > 100 utas, tetapi diperkirakan gagal dalam kisaran ini

TL; nilai pedoman DR

  • Utas_berjalan <50
  • 1. 1000 Threads_running ke QPS

Mari kita pindah persneling dan mengklarifikasi poin penting. utas MySQL adalah satu koneksi basis data. Threads_running adalah jumlah koneksi database dengan kueri aktif. Penting untuk diingat bahwa setiap instance aplikasi memiliki kumpulan koneksi database sendiri. Oleh karena itu, koneksi (utas) maksimum yang mungkin adalah. Max Connections = App Instances * Database Connection Pool Size

Ukuran kumpulan koneksi 100 masuk akal, tetapi jika aplikasi diterapkan ke 5 instance aplikasi, mungkin ada 500 koneksi database. Ini sering terjadi. aplikasi biasanya memiliki ratusan koneksi database yang menganggur, yang merupakan tujuan dari kumpulan koneksi. (MySQL juga memiliki metrik untuk utas yang terhubung. ) Tidak masalah sampai terlalu banyak koneksi (utas) yang berjalan sekaligus

Lebih dari sekali aplikasi diskalakan (mis. e. diterapkan ke lebih banyak instance aplikasi) untuk menangani lebih banyak permintaan tetapi, dengan demikian, membebani database dengan terlalu banyak utas yang berjalan. Tidak ada solusi cepat atau mudah untuk memperbaiki jenis batas kinerja database ini. Alasannya sederhana. jika Anda ingin MySQL melakukan lebih banyak unit kerja (kueri) dalam jumlah waktu yang sama (per detik), setiap unit harus memakan waktu lebih sedikit, jika tidak, matematika tidak bertambah. Jika kueri memerlukan waktu 100 md, tidak mungkin melakukan lebih dari 10 QPS. “Ah, tapi bagaimana dengan menggunakan lebih banyak inti CPU?”, Anda bertanya

Gotcha. Menggunakan inti CPU lain berarti menjalankan utas lain, dan sekarang kami bergerak cepat menuju batas yang jauh lebih rendah. 50 utas berjalan. Tapi inilah yang coba dilakukan oleh MySQL. Seperti disebutkan sebelumnya, MySQL sangat ambisius. itu tidak memiliki nilai maksimum untuk Threads_running dan akan mencoba menjalankan utas sebanyak yang diperlukan. Sedangkan plafon untuk QPS (jika ada) sangat tinggi, plafon untuk Threads_running sangat rendah. Kenapa ini?

50 utas berjalan adalah permintaan yang masuk akal. Saat ini, tahun 2020, bahkan 1.000 utas berjalan harus menjadi permintaan yang masuk akal. Biarkan saya menjawab pertanyaan dengan pertanyaan lain. Mengapa Toyota tidak memiliki kecepatan dan tenaga seperti Ferrari? . Mengapa Toyota tidak bisa lebih cepat saja?

Jawaban untuk keduanya ada di setiap detail teknik. Ferrari, misalnya, berjalan sangat cepat karena memiliki mesin yang sangat besar dan bertenaga, tetapi Anda tidak bisa berhenti di situ. Setiap detail mobil dirancang untuk mengaktifkan kekuatan itu atau tidak merusaknya. Misalnya, sebuah pesawat terbang dapat lepas landas dan terbang dengan kecepatan 258 km/jam, jadi sebuah Ferrari dengan kecepatan 340 km/jam akan terbang kecuali jika aerodinamika tubuhnya menahannya di tanah. Toyota bisa melaju 340 km/jam jika direkayasa. Dan MySQL dapat menjalankan 1.000 utas jika direkayasa

Seperti Toyota, MySQL dibangun dengan baik, dapat diandalkan, dan lebih dari yang Anda butuhkan, tetapi tidak ada apa pun tentangnya atau sekitarnya—perangkat keras, sistem operasi, dan aplikasi—yang direkayasa untuk menjadi Ferrari

Pengalaman dunia nyata menunjukkan bahwa MySQL tidak bekerja dengan baik untuk sebagian besar aplikasi yang melewati 50 thread yang berjalan. Kembali pada tahun 2014, pakar MySQL Alexey Straganov membandingkan MySQL 5. 6 dengan Threads_running yang sangat tinggi. Percona Server. Tingkatkan Skalabilitas dengan Percona Thread Pool. TL;DR. puncak kinerja pada 64 utas berjalan. Itu adalah hasil lab;

Solusinya? . Tapi itu topik panjang lainnya

Mari kita akhiri dengan nada positif. Mungkin pakar kinerja MySQL terkemuka di dunia adalah Vadim Tkachenko, dan dia baru saja mencapai 100.000 utas berjalan. Tantangan MySQL. 100k Koneksi. Tidak ada batasan

Berapa banyak utas yang ada di MySQL?

Jumlah maksimum utas per grup adalah 4096 (atau 4095 pada beberapa sistem di mana satu utas digunakan secara internal). Kumpulan utas memisahkan koneksi dan utas, jadi tidak ada hubungan tetap antara koneksi dan utas yang mengeksekusi pernyataan yang diterima dari koneksi tersebut.

Apa itu threading di database?

Utas adalah objek dalam proses yang menjalankan instruksi program . Utas memungkinkan operasi bersamaan dalam suatu proses sehingga suatu proses dapat menjalankan bagian yang berbeda dari programnya secara bersamaan pada prosesor yang berbeda. Arsitektur berbasis thread memberikan keuntungan sebagai berikut. Pergantian konteks lebih cepat.

Bagaimana saya melihat utas MySQL apa yang sedang berjalan?

Perintah ' SHOW processlist' dapat digunakan untuk menampilkan utas yang sedang berjalan yang hanya terkait dengan akun MySQL Anda. Kami dapat melihat hampir semua utas yang berjalan jika kami memiliki hak proses. Ini menunjukkan utas mana yang sedang berjalan.

Apakah MySQL single threaded atau multithreaded?

MySQL sepenuhnya multithread , dan memanfaatkan semua CPU yang tersedia untuknya. Tidak semua CPU tersedia; .