慢 SQL 的一般排查步骤为:
1.定位慢 SQL;
2.定位性能损耗节点;
3.定位性能损耗原因并处理。
说明:排查过程中,建议通过 MySQL 命令行进行连接:mysql -hIP -PPORT -uUSER -pPASSWORD -c 。请务必加上 “-c”,防止 MySQL 客户端过滤掉注释(默认)从而影响 HINT 的执行。
定位慢 SQL
定位慢 SQL 一般有两种场景……
通过分区字段(shardkey)把一个大表水平拆分到多个数据库,下面给大家介绍下分表的方法:
如何选择分区字段
一旦定好分区字段,就不能轻易修改分区字段,因此开发人员需要提前评估。选择分区字段的时候主要考虑两个维度:
通过该字段能否对数据进行均衡的存储和访问
多个相关联的表能否使用同一个字段。(相同分区字段……
Mysql 数据库作为数据持久化的存储系统,在实际业务中应用广泛。在应用也经常会因为 SQL 遇到各种各样的瓶颈。最常用的 Mysql 引擎是 innodb,索引类型是 B-Tree 索引,增删改查等操作最经常遇到的问题是“查”,查询又以索引为重点。
接下来的内容,安排如下:
介绍索引的工作原理
引用实例具体介绍索引
如何使用 explain……
SQL 优化的基本原则
在MySQL 执行的 SQL 计算称为可下推计算。可下推计算能够减少数据传输,减少网络层的开销,提升 SQL 语句的执行效率。
因此,SQL 语句优化的基本原则为:尽量让更多的计算可下推到 MySQL 上执行。
可下推计算主要包括:
JOIN 连接;
过滤条件,如 WHERE 或 HAVING 中的条件;
聚合计算,如 COUNT,G……
一个简单的对比测试
前面的案例中,c2c_zwdb.t_file_count表只有一个自增id,FFileName字段未加索引的sql执行情况如下:
在上图中,type=all,key=null,rows=33777。该sql未使用索引,是一个效率非常低的全表扫描。如果加上联合查询和其他一些约束条件,数据库会疯狂的消耗内存,并且会影响前端程序的执行。
这时给FFi……
规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎。
注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字段的长度之和不能超过1000字节。另外MyISAM数据和索引是分开,而InnoDB的数据存储是按聚簇(cluster)索引有序排列的,主键是默认的聚簇(cluster)索引,因此MyISA……
关于云数据库实例cpu 超过100%,通常这种情况都是由于sql 性能问题导致的,下面我用一则案例来分析:
用户实例xxx反馈cpu 超过100%,实例偶尔出现卡住的现象
1.原理:cpu 消耗过大通常情况下都是有慢sql 造成的,这里的慢sql 包括全表扫描,扫描数据量过大,内存排序,磁盘排序,锁争用等待等;
2.表现现象:sql 执行状态……
内存是重要的性能参数,常常出现由于异常的sql请求以及待优化的数据库导致内存利用率升高,更有甚者由于OOM导致实例发生HA切换。
MySQL的内存大体可以分为两部分:共享内存和session私有内存,下面详细介绍下各部分的构成。
1. 共享内存
以下为240M内存规格RDS实例的共享内存分配示意:
mysql>show variables where va……
什么是慢日志?
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。默认情况下,MySQL数据库并不启动慢查询日志,需要我们手动来设置这个参数,当……
1.MySQL读写性能是多少,有哪些性能相关的重要参数?
这里做了几个简单压测实验
机器:8核CPU,8G内存
表结构(尽量模拟业务):12个字段(1个bigint(20)为自增primary key,5个int(11),5个varchar(512),1个timestamp),InnoDB存储引擎。
实验1(写):insert => 6000/s
前提:连接数100,每次insert单条记录
分析:CPU跑……