Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Tips untuk Memberikan Kinerja Database MySQL - Bagian Satu

Backend database memengaruhi aplikasi, yang kemudian dapat memengaruhi kinerja organisasi. Ketika ini terjadi, mereka yang bertanggung jawab cenderung menginginkan perbaikan cepat. Ada banyak jalan berbeda untuk meningkatkan kinerja di MySQL. Sebagai pilihan yang sangat populer bagi banyak organisasi, cukup umum untuk menemukan instalasi MySQL dengan konfigurasi default. Namun, ini mungkin tidak sesuai untuk beban kerja dan kebutuhan penyiapan Anda.

Dalam blog ini, kami akan membantu Anda untuk lebih memahami beban kerja database Anda dan hal-hal yang dapat membahayakannya. Pengetahuan tentang cara menggunakan sumber daya yang terbatas sangat penting bagi siapa saja yang mengelola database, terutama jika Anda menjalankan sistem produksi di DB MySQL.

Untuk memastikan bahwa database bekerja seperti yang diharapkan, kita akan mulai dengan alat pemantauan MySQL gratis. Kami kemudian akan melihat parameter MySQL terkait yang dapat Anda atur untuk meningkatkan instance database. Kami juga akan melihat pengindeksan sebagai faktor dalam manajemen kinerja basis data.

Untuk dapat mencapai penggunaan sumber daya perangkat keras yang optimal, kita akan melihat pengoptimalan kernel dan pengaturan OS penting lainnya. Terakhir, kita akan melihat pengaturan trendi berdasarkan Replikasi MySQL dan bagaimana hal itu dapat diperiksa dalam hal kelambatan kinerja.

Mengidentifikasi Masalah Kinerja MySQL

Analisis ini membantu Anda memahami kesehatan dan kinerja database dengan lebih baik. Alat-alat yang tercantum di bawah ini dapat membantu menangkap dan memahami setiap transaksi, memungkinkan Anda tetap mengetahui kinerja dan konsumsi sumber dayanya.

PMM (Pemantauan dan Manajemen Percona)

Alat Pemantauan dan Manajemen Percona adalah kumpulan alat sumber terbuka yang didedikasikan untuk database MySQL, MongoDB, dan MariaDB (on-premise atau di cloud). PPM gratis untuk digunakan, dan didasarkan pada DB deret waktu Grafana dan Prometheus yang terkenal. Ini Menyediakan analisis berbasis waktu menyeluruh untuk MySQL. Ini menawarkan dasbor yang telah dikonfigurasi sebelumnya yang membantu memahami beban kerja database Anda.

PMM menggunakan model klien/server. Anda harus mengunduh dan menginstal klien dan server. Untuk server, Anda dapat menggunakan Docker Container. Semudah menarik image buruh pelabuhan PMM, membuat wadah, dan meluncurkan PMM.

Tarik Gambar Server PMM

docker pull percona/pmm-server:2

2: Pulling from percona/pmm-server

ab5ef0e58194: Downloading  2.141MB/75.78MB

cbbdeab9a179: Downloading  2.668MB/400.5MB

Buat Wadah PMM

docker create \

   -v /srv \

   --name pmm-data \

   percona/pmm-server:2 /bin/true

Jalankan Penampung

docker run -d \

   -p 80:80 \

   -p 443:443 \

   --volumes-from pmm-data \

   --name pmm-server \

   --restart always \

   percona/pmm-server:2

Anda juga dapat memeriksa tampilannya tanpa instalasi. Demo PMM tersedia di sini.

Alat lain yang merupakan bagian dari kumpulan alat PMM adalah Analisis Kueri (QAN). Alat QAN tetap berada di atas waktu eksekusi kueri. Anda bahkan bisa mendapatkan detail kueri SQL. Ini juga memberikan pandangan historis dari berbagai parameter yang sangat penting untuk kinerja optimal Server Database MySQL. Ini sering membantu untuk memahami jika ada perubahan dalam kode yang dapat membahayakan kinerja Anda. Misalnya, kode baru diperkenalkan tanpa sepengetahuan Anda. Penggunaan sederhana adalah untuk menampilkan kueri SQL saat ini dan menyoroti masalah untuk membantu Anda meningkatkan kinerja database Anda.

PMM menawarkan visibilitas kinerja database MySQL secara tepat waktu dan historis. Dasbor dapat disesuaikan untuk memenuhi kebutuhan spesifik Anda. Anda bahkan dapat memperluas panel tertentu untuk menemukan informasi yang Anda inginkan tentang acara sebelumnya.

Pemantauan Database Gratis dengan ClusterControl

ClusterControl menyediakan pemantauan real-time dari seluruh infrastruktur database. Mendukung berbagai sistem database mulai dengan MySQL, MariaDB, PerconaDB, MySQL NDB Cluster, Galera Cluster (baik Percona dan MariaDB), MongoDB, PostgreSQL dan TimescaleDB. Modul pemantauan dan penerapan dapat digunakan secara gratis.

ClusterControl terdiri dari beberapa modul. Dalam Edisi Komunitas ClusterControl gratis kita dapat menggunakan:

Penasihat kinerja menawarkan saran khusus tentang cara mengatasi masalah basis data dan server, seperti seperti kinerja, keamanan, manajemen log, konfigurasi, dan perencanaan kapasitas. Laporan operasional dapat digunakan untuk memastikan kepatuhan di ratusan instans. Namun, pemantauan bukanlah pengelolaan. ClusterControl memiliki fitur seperti manajemen pencadangan, pemulihan/penggagalan otomatis, penerapan/penskalaan, peningkatan berkelanjutan, keamanan/enkripsi, manajemen penyeimbang beban, dan sebagainya.

Pemantauan &Penasihat

Edisi Komunitas ClusterControl menawarkan pemantauan basis data gratis yang memberikan tampilan terpadu dari semua penerapan Anda di seluruh pusat data dan memungkinkan Anda menelusuri setiap node. Mirip dengan PMM, kita dapat menemukan dasbor berdasarkan data waktu nyata. Ini untuk mengetahui apa yang terjadi sekarang, dengan metrik resolusi tinggi untuk akurasi yang lebih baik, dasbor yang telah dikonfigurasi sebelumnya, dan berbagai layanan notifikasi pihak ketiga untuk peringatan.

Sistem lokal dan cloud dapat dipantau dan dikelola dari satu titik . Pemeriksaan kesehatan cerdas diimplementasikan untuk topologi terdistribusi, misalnya, deteksi partisi jaringan dengan memanfaatkan tampilan penyeimbang beban dari node database.

Analisis Beban Kerja Kontrol Cluster di salah satu komponen pemantauan yang dapat dengan mudah membantu Anda melacak aktivitas basis data Anda. Ini memberikan kejelasan ke dalam transaksi/query dari aplikasi. Pengecualian kinerja tidak pernah diharapkan, tetapi itu memang terjadi dan mudah dilewatkan di lautan data. Penemuan outlier akan mendapatkan kueri apa pun yang tiba-tiba mulai dieksekusi jauh lebih lambat dari biasanya. Ini melacak rata-rata bergerak dan deviasi standar untuk waktu eksekusi kueri dan mendeteksi/memperingatkan ketika perbedaan antara nilai melebihi rata-rata dengan dua deviasi standar.

Seperti yang dapat kita lihat dari gambar di bawah, kami dapat menangkap beberapa pertanyaan yang antara satu hari cenderung mengubah waktu eksekusi pada waktu tertentu.

Untuk menginstal ClusterControl klik di sini dan unduh skrip instalasi. Skrip instalasi akan menangani langkah-langkah instalasi yang diperlukan.

Anda juga harus melihat Demo ClusterControl untuk melihatnya beraksi.

Anda juga bisa mendapatkan gambar buruh pelabuhan dengan ClusterControl.

$ docker pull severalnines/clustercontrol

Untuk informasi lebih lanjut tentang ini, ikuti artikel ini.

Pengindeksan Database MySQL

Tanpa indeks, menjalankan kueri yang sama menghasilkan pemindaian setiap baris untuk data yang dibutuhkan. Membuat indeks pada bidang dalam tabel membuat struktur data tambahan, yang merupakan nilai bidang, dan penunjuk ke catatan yang terkait dengannya. Dengan kata lain, pengindeksan menghasilkan jalan pintas, dengan waktu kueri yang jauh lebih cepat pada tabel yang luas. Tanpa indeks, MySQL harus mulai dengan baris pertama dan kemudian membaca seluruh tabel untuk menemukan baris yang relevan.

Secara umum, pengindeksan berfungsi paling baik pada kolom yang menjadi subjek klausa WHERE dalam kueri yang biasa Anda jalankan.

Tabel dapat memiliki beberapa indeks. Mengelola indeks pasti akan membutuhkan kemampuan untuk membuat daftar indeks yang ada di atas meja. Sintaks untuk melihat indeks di bawah ini.

Untuk memeriksa indeks pada tabel MySQL, jalankan:

SHOW INDEX FROM table_name;

Karena indeks hanya digunakan untuk mempercepat pencarian bidang yang cocok dalam catatan, masuk akal bahwa bidang pengindeksan yang digunakan hanya untuk keluaran hanya akan membuang-buang ruang disk. Efek samping lainnya adalah bahwa indeks dapat memperpanjang operasi penyisipan atau penghapusan, dan karenanya bila tidak diperlukan, harus dihindari.

Perubahan Basis Data MySQL

Pada server di mana MySQL adalah satu-satunya layanan yang berjalan, praktik yang baik adalah menyetel vm.swapiness =1. Setelan default disetel ke 60 yang tidak sesuai untuk sistem database.

vi /etc/sysctl.conf
vm.swappiness = 1

Halaman Besar Transparan

Jika Anda menjalankan MySQL di RedHat, pastikan bahwa Transparent Huge Pages dinonaktifkan.

Ini dapat diperiksa dengan perintah:

cat /proc/sys/vm/nr_hugepages
0

(0 berarti halaman besar transparan dinonaktifkan.)

Penjadwal I/O MySQL 

Di sebagian besar distribusi, penjadwal I/O noop atau tenggat waktu harus diaktifkan secara default. Untuk memeriksanya, jalankan

cat /sys/block/sdb/queue/scheduler 

Opsi Sistem File MySQL

Disarankan untuk menggunakan sistem file jurnal seperti xfs, ext4 atau btrfs. MySQL bekerja dengan baik dengan semua itu dan perbedaannya kemungkinan besar akan datang dengan ukuran file maksimum yang didukung.

  • XFS (ukuran sistem file maksimum 8EB, ukuran file maksimum 8EB)
  • XT4 (ukuran sistem file maksimum 8EB, ukuran file maksimum 16TB)
  • BTRFS (ukuran sistem file maksimum 16EB, ukuran file maksimum 16EB)

Setelan sistem file default harus diterapkan dengan baik.

Deamon NTP

Ini adalah praktik terbaik yang baik untuk menginstal NTP time server demon di server database. Gunakan salah satu dari perintah sistem berikut.

#Red Hat
yum install ntp
#Debian
sudo apt-get install ntp

Kesimpulan

Ini semua untuk bagian satu. Pada artikel berikutnya, kita akan melanjutkan dengan pengaturan sistem operasi variabel MySQL dan kueri yang berguna untuk mengumpulkan status kinerja database.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SUBTIME() Contoh – MySQL

  2. Cara Instal MySQL dengan phpMyAdmin di Debian 7

  3. Bagaimana cara menggunakan tipe int/long yang tidak ditandatangani dengan Entity Framework?

  4. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Kegagalan tautan komunikasi

  5. Tutorial MySQL :Pernyataan MySQL IN (Lanjutan)