Jadual Kandungan
Sebab
Ringkasan
Rumah Topik php mysql Cipta indeks MySQL untuk mengoptimumkan prestasi aplikasi PHP

Cipta indeks MySQL untuk mengoptimumkan prestasi aplikasi PHP

Dec 29, 2022 pm 04:21 PM
php

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 Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Feb 07, 2025 am 11:57 AM

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini 7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini Nov 13, 2024 am 09:42 AM

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Program PHP untuk mengira vokal dalam rentetan Program PHP untuk mengira vokal dalam rentetan Feb 07, 2025 pm 12:12 PM

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apr 03, 2025 am 12:03 AM

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.

See all articles