이 기사는 PHP 애플리케이션의 성능을 크게 최적화하기 위한 인덱싱 관련 내용을 주로 소개하는 mysql에 대한 관련 지식을 제공합니다. 모두에게 도움이 되기를 바랍니다.
원인
친구가 두 달 전 빠른 온라인 홍보를 위해 프로젝트를 하려고 했고, 특정 회사의 소스코드를 직접 구매해서 판매자에게 온라인 배포를 요청했습니다. 소스코드를 본 후 친구에게 직접 이렇게 말했습니다: '나 속았어.
다음과 같은 평가를 위한 근거가 있습니다.
실시간에 가까운 애플리케이션으로서 핵심 코드는 PHP로 작성되었으며, 여러 시나리오의 동시 및 반복 요청은 데이터베이스 테이블 레코드를 통해 제어됩니다.
PHP 개발에는 문제가 없지만, 다른 엔지니어는 CLI 모드에 대해 모르는 것 같았으나 프로그램의 논스톱 실행을 위해 예약된 작업(crontab)을 사용했기 때문에 매일 수십 개의 컬 예약된 작업이 실행되었습니다. 분 - 코드에는 .php, class1-1.php 등이 많아 한눈에 그 존재 목적을 알기 어렵습니다. 데이터베이스를 읽기 위해 반복하고 있으며 명명 규칙이 혼란스럽습니다.
- 물론 돈을 벌 수 있는 코드는 좋은 코드(상대방이 이 코드를 통해 돈을 버는 코드)이기 때문에 그것에 너무 연연하지는 않습니다. 초기 생각에는 4코어 8G 구성으로는 1만명의 고객에게 서비스를 제공하기 어렵지만 5,000명이면 충분할 것이라고 생각했습니다.
Turning
이번 주에만 갑자기 Alibaba Cloud로부터 CPU 사용량이 너무 높다는 알람 문자 메시지와 이메일을 자주 받았습니다. 마케팅 프로모션이 잘 진행되고 있고, 이용자 수도 눈에 띄게 늘었다고 생각하시나요? 친구들한테 물어보니 이용자가 300명도 안됐어요!
코드를 받은 지 두 달이 지났습니다. 틈날 때마다 가끔 살펴보며 이미 코드의 구조와 주요 기능에 대해 전반적으로 이해하고 있습니다. 이제 심각한 성능 문제가 있으므로 성능 최적화를 시도해 볼 차례입니다.
수십 개의 예약된 작업이 쉬지 않고 실행되고 지속적으로 시스템을 구동한다는 점을 고려하면 예약된 작업과 관련된 기능을 먼저 이해해야 합니다. 내 자신의 이해를 바탕으로 더 이상 필요하지 않은 20개 이상의 계획된 작업을 먼저 중단했습니다. 쓸모없는 예약 작업을 일시 중지한 후 전체 시스템 CPU 사용량이 60% 이상으로 떨어졌고, 귀찮은 알림 문자 메시지와 이메일이 마침내 중단되었습니다. 하루를 기다려도 친구들은 기능이 영향을 받았다고 보고하지 않았는데, 이는 아이디어와 출발점이 정확하다는 것을 보여줍니다.
그런데 200명 이상의 사용자가 이렇게 리소스를 소비하고 있으니 뭔가 문제가 있는 게 틀림없습니다. 오늘 시간이 있을 때 다시 서버에 접속해서 top 명령을 실행해 보니
mysql프로세스가 CPU 자원의 200% 이상을 차지하고 있는 것을 발견했습니다. 소스 코드를 읽어보니 MySQL의 사용량이 많은 데에는 이유가 있고 그럴 수도 있다는 것을 알지만 여전히 왜 그렇게 많은 리소스를 소비하는지 알고 싶습니다.
MySQL 서버에 로그인하여 느린 로그가 활성화되어 있는지 확인하세요. '%slow%';와 같은 변수를 표시하고 느린 쿼리 로그가 활성화되어 있는지 확인하세요.
그런 다음 로그를 확인하고 특정 SQL 문이 항상 로그에 나타납니다.요약
개발 프로젝트에서 엔지니어는 "사용 가능한" 코드뿐만 아니라 "사용하기 쉬운" 코드도 작성해야 합니다. 이 예에서는 두 개의 인덱스를 생성하여 시스템 성능을 크게 향상시킬 수 있습니다. 즉, 코드를 "사용 가능"에서 "사용하기 쉬움"으로 변경합니다.
이 글에서 언급한 성능 최적화는 운영과 유지 관리에 중점을 두고 있으며 코드에서의 성능 최적화는 아직 다루지 않았습니다. 그러나 일반적인 원칙은 정확합니다. 캐시를 더 많이 사용하고 느린 IO 장치의 동기 읽기를 최대한 줄이는 것입니다.
추천 학습: "mysql 비디오 튜토리얼", "PHP 비디오 튜토리얼"
위 내용은 PHP 애플리케이션의 성능을 크게 최적화하기 위해 MySQL 인덱스 생성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

드림위버 CS6
시각적 웹 개발 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!
