찾다
데이터 베이스MySQL 튜토리얼浅析如何定位,排除和避免MySQL性能故障

浅析如何定位,排除和避免MySQL性能故障

Jun 07, 2016 pm 04:09 PM
mysql어떻게위치성능들어오지 못하게 하다잘못피하다

首先是如何检查SQL的效率. 1.善用explain: 设计SQL后,应使用explain命令检查SQL,看是否使用到索引,是否存在filesort,重点检查检索的行数(rows)是否太大。 一般来说. rows1000,是在可接受的范围内的。 rows在1000~1w之间,在密集访问时可能导致性能问题

首先是如何检查SQL的效率.

1.善用explain:

设计SQL后,应使用explain命令检查SQL,看是否使用到索引,是否存在filesort,重点检查检索的行数(rows)是否太大。

一般来说.

rows

rows在1000~1w之间,在密集访问时可能导致性能问题,但如果不是太频繁的访问(频率低于1分钟一次),又难再优化的话,可以接受,但需要注意观察

rows大于1万时,应慎重考虑SQL的设计,优化SQL,优化db,一般来说不允许频繁运行(频率低于1小时一次)。

rows达到10w级别时,坚决不能做为实时运行的SQL。但导数据场合除外,但导数据必须控制好时间,频度。

explain SQL语句应该是日常开发中的习惯动作,有时explain出来的结果,可能会出于偏离设计的意料之外,所以

**强烈建议在设计SQL,尤其是稍微复杂的SQL时,一定要在测试环境甚至是实际环境上预先进行explain**

2.MySQL慢查询日志

一般应打开MySQL的慢查询日志(在my.cnf中加入log_slow_queries和long_query_time两个参数),会记录所有查询持续时间超过long_query_time的SQL语句,把这些语句log下来之后,再一一分析(explain)优化。

3.监视当前进程

登陆MySQL,使用show processlist查看正在运行的SQL语句,如果正在运行的语句太多,运行时间太长,表示MySQL效率有问题。必要的时候可以将对应的进程kill掉。

4.系统命令

使用top/vmstat等系统命令来检查MySQL进程占用的cpu,内存,以及磁盘IO量。

对MySQL优化的文章很多,这里只提几点平时工作中比较常用到的方法。

◆建表时,显式指定使用innodb数据库引擎,而不是myisam,myisam引擎的锁是表锁,读锁和写锁是互斥的,读写操作是串行的,锁冲突会严重影响并发.而innodb提供行级锁,能提供较好的并发表现,在我们的业务场景里,也不会引起死锁。

◆善用索引,对SQL语句where条件里使用到的字段,合理建立索引。虽然对表建立索引一定程度上会影响写入效率,但在表数据规模不大,写入压力不是特别高的情况下,索引带来的好处是更多的。

◆当SQL语句是由代码动态生成的,如在运行时根据用户操作加入不同的where参数,应在测试阶段对SQL生成的典型情况和边界情况进行测试,看是否有可能造成性能问题。并应适当生成一些日志,供提取最终生成的SQL进行效率分析。

◆对数据应合理分库分表,由应用层去动态的选择库和表。MySQL的innodb表虽然理论上可以装海量的数据,但在我们的业务场景下,数据控制在500w以下会比较合理,追求性能的话,最好控制在200w以下,合理索引。

◆需要联合查询时善用left join/right join而不是直接多表联合,怎么用,查manul ^_^ 

◆尽量不要使用select套select的复合查询,如果能拆开,尽量拆开,多条精悍的SQL,组合起来可能就是一条庞大的SQL,应该避免。

◆善用cache,将不常修改的,数据量有限的,又是被密集查询的信息,加载到cache里,可以有效的降低数据库压力。在一般的业务场景里,推荐使用开源memcache,简单高效。

◆如果一些逻辑可以放到应用层去完成,可以考虑放到应用层去完成。但如果将SQL逻辑分拆到应用层可能导致对数据更频繁的访问的话,那么需要考虑修改应用逻辑,数据结构,或回到合理的联合查询上来。

比如某些数据的排序可以load到php数组里,再sort.又比如需要查询A,B两个表,A表里的数据是B表里某个字段的对照说明(如A:t_service表,B.t_task表),A表数据量有限,可以做联合查询,也可以先将A表先load到进程或内存里,用hash结构cache起来,再查B表,然后在cache里依次查询hash,获得对照说明。

◆关于导数据和统计性查询.导数据在计算和磁盘io上对数据库压力都会很大,应在时间和空间上合理分摊数据库压力如果需要导出批量的特定数据做分析,应建立专供数据分析的数据库服务器,或者建立临时库表,先导出数据,再在上面做分析运算。

导数据等可能引起批量数据读取的操作,应建立定时任务,在数据库不繁忙的时段(凌晨1~7时)运行一般的统计操作,对实时性要求都不会太高(5~10分钟以上,甚至一天,一周等),这种数据不应在每次访问时运行库中直接count,group,而是应该由定时任务导出,建立结果表或中间结果表,供最终用户使用。

◆生产数据库上的操作权限应严格控制,而开发人员在生产数据库上直接运行SQL语句,要尽量慎重。

能做到以上这些,基本上可以算MySQL以及相关系统优化入门,可以保证不要让我们的数据库整天累趴下了。

最后,即使做足了功课,也还是要例行的对数据库运行情况进行观察,监控,尽早发现其性能瓶颈,在未造成危害前解决掉。


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
MySQL : 초보자가 마스터하는 필수 기술MySQL : 초보자가 마스터하는 필수 기술Apr 18, 2025 am 12:24 AM

MySQL은 초보자가 데이터베이스 기술을 배우는 데 적합합니다. 1. MySQL 서버 및 클라이언트 도구를 설치하십시오. 2. SELECT와 같은 기본 SQL 쿼리를 이해하십시오. 3. 마스터 데이터 작업 : 데이터를 만들고, 삽입, 업데이트 및 삭제합니다. 4. 고급 기술 배우기 : 하위 쿼리 및 창 함수. 5. 디버깅 및 최적화 : 구문 확인, 인덱스 사용, 선택*을 피하고 제한을 사용하십시오.

MySQL : 구조화 된 데이터 및 관계형 데이터베이스MySQL : 구조화 된 데이터 및 관계형 데이터베이스Apr 18, 2025 am 12:22 AM

MySQL은 테이블 구조 및 SQL 쿼리를 통해 구조화 된 데이터를 효율적으로 관리하고 외래 키를 통해 테이블 ​​간 관계를 구현합니다. 1. 테이블을 만들 때 데이터 형식을 정의하고 입력하십시오. 2. 외래 키를 사용하여 테이블 간의 관계를 설정하십시오. 3. 인덱싱 및 쿼리 최적화를 통해 성능을 향상시킵니다. 4. 데이터 보안 및 성능 최적화를 보장하기 위해 데이터베이스를 정기적으로 백업 및 모니터링합니다.

MySQL : 주요 기능 및 기능이 설명되었습니다MySQL : 주요 기능 및 기능이 설명되었습니다Apr 18, 2025 am 12:17 AM

MySQL은 웹 개발에 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 주요 기능에는 다음이 포함됩니다. 1. 다른 시나리오에 적합한 InnoDB 및 MyISAM과 같은 여러 스토리지 엔진을 지원합니다. 2.로드 밸런싱 및 데이터 백업을 용이하게하기 위해 마스터 슬레이브 복제 기능을 제공합니다. 3. 쿼리 최적화 및 색인 사용을 통해 쿼리 효율성을 향상시킵니다.

SQL의 목적 : MySQL 데이터베이스와 상호 작용합니다SQL의 목적 : MySQL 데이터베이스와 상호 작용합니다Apr 18, 2025 am 12:12 AM

SQL은 MySQL 데이터베이스와 상호 작용하여 데이터 첨가, 삭제, 수정, 검사 및 데이터베이스 설계를 실현하는 데 사용됩니다. 1) SQL은 Select, Insert, Update, Delete 문을 통해 데이터 작업을 수행합니다. 2) 데이터베이스 설계 및 관리에 대한 생성, 변경, 삭제 문을 사용하십시오. 3) 복잡한 쿼리 및 데이터 분석은 SQL을 통해 구현되어 비즈니스 의사 결정 효율성을 향상시킵니다.

초보자를위한 MySQL : 데이터베이스 관리를 시작합니다초보자를위한 MySQL : 데이터베이스 관리를 시작합니다Apr 18, 2025 am 12:10 AM

MySQL의 기본 작업에는 데이터베이스, 테이블 작성 및 SQL을 사용하여 데이터에서 CRUD 작업을 수행하는 것이 포함됩니다. 1. 데이터베이스 생성 : createAbasemy_first_db; 2. 테이블 만들기 : CreateTableBooks (idintauto_incrementprimarykey, titlevarchar (100) notnull, authorvarchar (100) notnull, published_yearint); 3. 데이터 삽입 : InsertIntobooks (Title, Author, Published_year) VA

MySQL의 역할 : 웹 응용 프로그램의 데이터베이스MySQL의 역할 : 웹 응용 프로그램의 데이터베이스Apr 17, 2025 am 12:23 AM

웹 응용 프로그램에서 MySQL의 주요 역할은 데이터를 저장하고 관리하는 것입니다. 1. MySQL은 사용자 정보, 제품 카탈로그, 트랜잭션 레코드 및 기타 데이터를 효율적으로 처리합니다. 2. SQL 쿼리를 통해 개발자는 데이터베이스에서 정보를 추출하여 동적 컨텐츠를 생성 할 수 있습니다. 3.mysql은 클라이언트-서버 모델을 기반으로 작동하여 허용 가능한 쿼리 속도를 보장합니다.

MySQL : 첫 번째 데이터베이스 구축MySQL : 첫 번째 데이터베이스 구축Apr 17, 2025 am 12:22 AM

MySQL 데이터베이스를 구축하는 단계에는 다음이 포함됩니다. 1. 데이터베이스 및 테이블 작성, 2. 데이터 삽입 및 3. 쿼리를 수행하십시오. 먼저 CreateAbase 및 CreateTable 문을 사용하여 데이터베이스 및 테이블을 작성한 다음 InsertInto 문을 사용하여 데이터를 삽입 한 다음 최종적으로 SELECT 문을 사용하여 데이터를 쿼리하십시오.

MySQL : 데이터 저장에 대한 초보자 친화적 인 접근 방식MySQL : 데이터 저장에 대한 초보자 친화적 인 접근 방식Apr 17, 2025 am 12:21 AM

MySQL은 사용하기 쉽고 강력하기 때문에 초보자에게 적합합니다. 1.MySQL은 관계형 데이터베이스이며 CRUD 작업에 SQL을 사용합니다. 2. 설치가 간단하고 루트 사용자 비밀번호를 구성해야합니다. 3. 삽입, 업데이트, 삭제 및 선택하여 데이터 작업을 수행하십시오. 4. Orderby, Where and Join은 복잡한 쿼리에 사용될 수 있습니다. 5. 디버깅은 구문을 확인하고 쿼리를 분석하기 위해 설명을 사용해야합니다. 6. 최적화 제안에는 인덱스 사용, 올바른 데이터 유형 선택 및 우수한 프로그래밍 습관이 포함됩니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

뜨거운 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 영어 버전

SublimeText3 영어 버전

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

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구