検索
ホームページデータベース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 までご連絡ください。
如何使用WordPress插件实现即时定位功能如何使用WordPress插件实现即时定位功能Sep 05, 2023 pm 04:51 PM

如何使用WordPress插件实现即时定位功能随着移动设备的普及,越来越多的网站开始提供基于地理位置的服务。在WordPress网站中,我们可以通过使用插件来实现即时定位功能,为访问者提供与地理位置相关的服务。一、选择适合的插件在WordPress插件库中有很多提供地理位置服务的插件可供选择。根据需求和要求,选择适合的插件是实现即时定位功能的关键。以下是几个

如何在uniapp中使用地图和定位功能如何在uniapp中使用地图和定位功能Oct 16, 2023 am 08:01 AM

如何在uniapp中使用地图和定位功能一、背景介绍随着移动应用的普及和定位技术的迅猛发展,地图和定位功能已经成为了现代移动应用中不可缺少的一部分。uniapp是一种基于Vue.js开发的跨平台应用开发框架,可以方便开发者在多个平台上共用代码。本文将介绍如何在uniapp中使用地图和定位功能,并提供具体的代码示例。二、使用uniapp-amap组件实现地图功能

解决Go语言开发中的内存泄漏定位问题的方法解决Go语言开发中的内存泄漏定位问题的方法Jul 01, 2023 pm 12:33 PM

解决Go语言开发中的内存泄漏定位问题的方法内存泄漏是程序开发中常见的问题之一。在Go语言开发中,由于其自动垃圾回收机制的存在,内存泄漏问题相对其他语言来说可能较少。然而,当我们面对大型复杂的应用程序时,仍然可能会出现内存泄漏的情况。本文将介绍一些在Go语言开发中定位和解决内存泄漏问题的常用方法。首先,我们需要了解什么是内存泄漏。简单来说,内存泄漏指的是程序中

响应式布局中使用HTML固定定位的实用技巧响应式布局中使用HTML固定定位的实用技巧Jan 20, 2024 am 09:55 AM

HTML固定定位在响应式布局中的应用技巧,需要具体代码示例随着移动设备的普及和用户对响应式布局的需求增加,开发人员在网页设计中遇到了更多的挑战。其中一个关键问题就是如何实现固定定位,以确保在不同屏幕尺寸下,元素能够固定在页面的特定位置。本文将介绍HTML固定定位在响应式布局中的应用技巧,并提供具体代码示例。HTML中的固定定位是通过CSS的position属

怎样发位置给别人怎样发位置给别人Jun 27, 2023 am 10:13 AM

发位置给别人的方法是:1、使用手机地图发位置,分享界面上选择合适的通讯应用或者社交媒体,将位置信息发送给需要的人;2、使用第三方位置分享工具,实现设备之间的位置共享;3、利用Wi-Fi,蓝牙和Beacon技术发位置。

MySql的性能瓶颈问题分析:如何快速定位MySQL性能瓶颈MySql的性能瓶颈问题分析:如何快速定位MySQL性能瓶颈Jun 15, 2023 pm 11:22 PM

MySql是目前应用最广泛的开源数据库之一,但在高并发、大数据量等场景下可能会出现性能瓶颈问题,影响系统稳定性和数据可靠性。本文将从以下几个方面分析MySql性能瓶颈问题的定位和优化。1.硬件资源配置是否合理MySql的性能与硬件资源配置密切相关,如果服务器硬件资源配置不足,如CPU、内存、硬盘、网络带宽等,将会严重影响MySql的运行效率和稳定性。因此,首

如何在uniapp中实现百度地图定位如何在uniapp中实现百度地图定位Jul 04, 2023 pm 12:07 PM

如何在UniApp中实现百度地图定位引言:UniApp是一款基于Vue.js的开发框架,可以用于快速开发跨平台的应用程序。在今天的数字化时代,地图定位功能已经成为许多应用程序的重要组成部分。本文将教您如何在UniApp中使用百度地图定位功能,并提供相应的代码示例。一、准备工作在开始之前,我们需要进行一些准备工作。首先,您需要在百度开发者平台注册一个开发者账号

如何快速定位PHP报错的代码行?如何快速定位PHP报错的代码行?Jul 14, 2023 am 09:34 AM

如何快速定位PHP报错的代码行?在开发PHP项目时,经常会遇到各种报错,这些报错信息对于定位和解决问题非常重要。然而,有时候报错信息并不够详细,只会告诉你出错的文件和行号,而没有具体的错误信息。这给我们定位和解决问题带来了一定的困难。本文将介绍一些方法来帮助我们快速定位PHP报错的具体代码行。启用错误报告首先,我们需要确保错误报告被启用。在PHP代码中,有一

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ヘンタイを無料で生成します。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。