Rumah  >  Artikel  >  Topik  >  Cipta indeks MySQL untuk mengoptimumkan prestasi aplikasi PHP

Cipta indeks MySQL untuk mengoptimumkan prestasi aplikasi PHP

WBOY
WBOYke hadapan
2022-12-29 16:21:291703semak imbas

Artikel ini membawakan anda pengetahuan yang berkaitan tentang mysql, yang terutamanya memperkenalkan kandungan yang berkaitan tentang pengindeksan untuk mengoptimumkan prestasi aplikasi PHP. Mari kita lihat bersama-sama.

Cipta indeks MySQL untuk mengoptimumkan prestasi aplikasi PHP

Sebab

Dua bulan yang lalu, seorang rakan ingin membuat projek Untuk tujuan promosi dalam talian yang pantas, dia secara langsung membeli sebuah syarikat Kod sumber dan biarkan penjual menggunakannya dalam talian. Selepas melihat kod sumber, saya terus berkata kepada rakan saya: Saya telah ditipu Kualiti kod sumber ini agak teruk, dan mungkin terdapat masalah prestasi yang serius apabila bilangan pengguna meningkat.

Saya mempunyai asas untuk membuat penilaian sedemikian:

  • Sebagai aplikasi hampir masa nyata, kod teras ditulis dalam PHP, dan keselarasan banyak senario dikawal melalui rekod jadual pangkalan data dan permintaan berulang; (crontab) untuk mencapai program berjalan tanpa henti, jadi sangat hebat Puluhan tugas berjadual curl dilaksanakan setiap minit; Fail .php dalam kod. Sukar untuk mengetahui kewujudan mereka sepintas lalu. mengelirukan.

  • Sudah tentu, kod yang boleh menjana wang ialah kod yang bagus (pihak lain menjana wang melalui kod ini), jadi saya tidak terlalu risau mengenainya. Pemikiran awal ialah dengan konfigurasi 4-teras 8G, sukar untuk melayani 10,000 pelanggan, tetapi 5,000 sudah memadai.

  • Berbalik
  • Baru minggu ini, saya tiba-tiba menerima mesej teks penggera dan e-mel yang kerap daripada Alibaba Cloud, mengatakan bahawa penggunaan CPU terlalu tinggi. Adakah anda fikir promosi pemasaran berjalan lancar dan bilangan pengguna telah meningkat dengan ketara? Apabila saya bertanya kepada rakan-rakan saya, terdapat kurang daripada 300 pengguna!

  • Pada masa itulah saya menyedari bahawa prestasi sebenar kod ini adalah lebih teruk daripada yang saya fikirkan, dan terdapat isu prestasi yang serius. Mengikut kadar penggunaan sumber ini, menaik taraf perkakasan adalah jurang yang tidak terhingga, dan pengoptimuman prestasi adalah cara yang betul.
Pengoptimuman Prestasi

Sudah dua bulan sejak saya mendapat kod itu sekali-sekala saya melihatnya pada masa lapang dan sudah mempunyai pemahaman umum tentang struktur dan fungsi utamanya. Memandangkan kami mempunyai isu prestasi yang serius, tiba masanya untuk mencuba beberapa pengoptimuman prestasi.

Memandangkan berpuluh-puluh tugas berjadual berjalan tanpa henti dan memacu sistem secara berterusan, fungsi berkaitan tugas berjadual adalah yang pertama untuk difahami. Berdasarkan pemahaman saya sendiri, saya menangguhkan terlebih dahulu lebih daripada dua puluh tugas yang dirancang yang tidak lagi diperlukan. Selepas menjeda tugas berjadual yang tidak berguna, keseluruhan penggunaan CPU sistem menurun kepada lebih daripada 60%, dan mesej teks dan e-mel peringatan yang menjengkelkan akhirnya berhenti. Selepas menunggu sehari, rakan-rakan saya tidak melaporkan bahawa fungsi terjejas, yang menunjukkan bahawa idea dan titik permulaan adalah betul.

Tetapi dengan lebih 200 pengguna menggunakan sumber seperti ini, pasti ada sesuatu yang tidak kena. Saya log masuk ke pelayan sekali lagi apabila saya bebas hari ini, melaksanakan arahan teratas, dan mendapati proses

mysqlCipta indeks MySQL untuk mengoptimumkan prestasi aplikasi PHP telah menduduki lebih daripada 200% sumber CPU. Setelah membaca kod sumber, saya tahu bahawa terdapat sebab untuk penggunaan MySQL yang tinggi dan ia mungkin, tetapi saya masih mahu melihat mengapa ia menggunakan begitu banyak sumber.

Log masuk ke pelayan MySQL dan semak sama ada log perlahan didayakan: tunjukkan pembolehubah seperti '%slow%' dan ketahui log pertanyaan perlahan didayakan:

Teruskan Semak log dan mendapati bahawa pernyataan SQL tertentu sentiasa muncul dalam log:

Anda dapat melihat bahawa lebih daripada 380,000 baris rekod telah diimbas apabila pernyataan SQL ini dilaksanakan. Satu daripada dua jadual yang terlibat dalam penyata mempunyai lebih daripada 600 rekod, dan satu lagi mempunyai lebih daripada 40,000 rekod Ini bersamaan dengan mengimbas keseluruhan jadual dengan lebih daripada 40,000 rekod.

Kemudian semak indeks kedua-dua jadual Kecuali untuk id yang ditambah secara automatik sebagai kunci utama, tiada indeks lain dibuat. Gunakan explain untuk melaksanakan pernyataan, yang menunjukkan bahawa tiada indeks digunakan:

Cipta indeks MySQL untuk mengoptimumkan prestasi aplikasi PHP

Seterusnya, buat indeks pada lajur uid dan session_id bagi syarat pertanyaan pada dua jadual. Selepas penciptaan indeks selesai, penggunaan CPU yang kelihatan dan beban sistem dikurangkan. Gunakan explain sekali lagi untuk melaksanakan pernyataan pertanyaan Maklumat indeks telah digunakan dan bilangan baris yang diimbas telah dikurangkan dengan banyak:

Cipta indeks MySQL untuk mengoptimumkan prestasi aplikasi PHP

Selepas pengoptimuman di atas, keseluruhan penggunaan CPU. daripada aplikasi semasa ialah 5%. Sekitar 15%, penggunaan CPU MySQL menurun daripada 4 kepada 0.3. Akhir sekali, tidak perlu risau tentang isu prestasi buat masa ini Walaupun konfigurasi pelayan dikurangkan kepada 1 teras CPU, ia masih boleh mengekalkannya.

Semak kod dan gabungkan dengan log untuk membuat indeks dan mengubah suai beberapa pernyataan pertanyaan Penggunaan CPU menurun kepada kira-kira 6%. >

Ringkasan

Dalam projek pembangunan, jurutera bukan sahaja mesti menulis kod "boleh digunakan", tetapi juga kod "mudah digunakan". Dalam contoh ini, dengan mencipta dua indeks, prestasi sistem boleh dipertingkatkan dengan ketara, iaitu menukar kod daripada "boleh guna" kepada "mudah digunakan".

Pengoptimuman prestasi yang disebut dalam artikel ini memfokuskan pada operasi dan penyelenggaraan, dan pengoptimuman prestasi dalam kod masih belum disentuh. Tetapi prinsip umum adalah betul: gunakan lebih banyak cache dan kurangkan bacaan segerak daripada peranti IO perlahan sebanyak mungkin.

Pembelajaran yang disyorkan: "tutorial video mysql", "Tutorial video PHP"

Atas ialah kandungan terperinci Cipta indeks MySQL untuk mengoptimumkan prestasi aplikasi PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tlanyan.me. Jika ada pelanggaran, sila hubungi admin@php.cn Padam