有时候,我们随机更新几行数据,可能会下意识的直接写成下面的SQL: [yejr@imysql]> UPDATE t1 SET c1 = ?...WHERE id = ROUND(RAND() * 102400); 不过你可能不知道,这个SQL的效率极低,需要进行全表扫描,因为无法使用索引: [yejr]@[imysql.com]> EXPLAIN...把之前写的SQL用JOIN改造一下: [yejr@imysql]> EXPLAIN UPDATE t1, (SELECT ROUND(RAND() * (SELECT MAX(id) FROM t1))...[yejr@imysql]>UPDATE t1, (SELECT ROUND(RAND() * (SELECT MAX(id) FROM t1)) AS rndid) t2 SET t1.c1=3 WHERE...t1.id=t2.rndid; Query OK, 1 row affected (0.02 sec) [yejr@imysql]>SHOW STATUS LIKE 'handler%read%';
简言之,需要启用performance_schema,并设置2个地方: [yejr@imysql]> UPDATE setup_instruments SET ENABLED = 'YES' WHERE...NAME LIKE 'stage/innodb/alter%'; [yejr@imysql]> UPDATE setup_consumers SET ENABLED = 'YES' WHERE NAME...LIKE '%stages%'; 现在,跑个DDL看看: [yejr@imysql]> SELECT COUNT(*) FROM t1; +----------+ | count(*) | +----...| +------------------------------------------------------+----------------+----------------+ [yejr@imysql...| +------------------------------------------------------+----------------+----------------+ [yejr@imysql
有时候,我们随机更新几行数据,可能会下意识的直接写成下面的SQL: [yejr@imysql]> UPDATE t1 SET c1 = ?...WHERE id = ROUND(RAND() * 102400); 不过你可能不知道,这个SQL的效率极低,需要进行全表扫描,因为无法使用索引: [yejr]@[imysql.com]> EXPLAIN...关注我网站(http://imysql.com)的同学,可能还记得我以前还写过一个关于随机排序的分享:[MySQL优化案例]系列 — RAND()优化。...可以借鉴这篇文章的思路,把上面的SQL用JOIN改造一下: [yejr@imysql]> EXPLAIN UPDATE t1, (SELECT ROUND(RAND() * (SELECT MAX(id...t1.id=t2.rndid; Query OK, 1 row affected (0.02 sec)[yejr@imysql]>SHOW STATUS LIKE 'handler%read%'; +
DEFAULT NULL, `dt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ) ENGINE=InnoDB; 插入测试数据: yejr@imysql.com...> insert into t1(id) select 1; --- 不指定dt列的值 yejr@imysql.com> insert into t1 select 2, now(); --- 指定...dt列的值为now() yejr@imysql.com> insert into t1(id) select 3; --- 不指定dt列的值 查询数据: yejr@imysql.com> select...先查看执行计划: yejr@imysql.com> desc select * from t1 where dt is null\G *************************** 1. row... rows: 5 filtered: 20.00 Extra: Using where 1 row in set, 1 warning (0.00 sec) yejr@imysql.com
首先,我们先看下SLAVE的状态: yejr@imysql.com [(none)]> show slave status\G *************************** 1. row **...我们再来看下SLAVE上的2个REPLICATION进程状态: yejr@imysql.com [(none)]> show full processlist\G *******************...来看下面几个状态: #设置pager,只查看关注的几个status值 yejr@imysql.com [(none)]> pager cat | egrep -i 'system user|Exec_Master_Log_Pos...Read_Master_Log_Pos: 445167889 Exec_Master_Log_Pos: 445167889 Seconds_Behind_Master: 0 #和上面一样 yejr@imysql.com...Read_Master_Log_Pos: 445182239 Exec_Master_Log_Pos: 445175263 Seconds_Behind_Master: 1 #和上面一样 yejr@imysql.com
首先,我们先看下 SLAVE 的状态: yejr@imysql.com [(none)]> show slave status\G *************************** 1. row...我们再来看下 SLAVE 上的 2 个 REPLICATION 进程状态: yejr@imysql.com [(none)]> show full processlist\G ************...Read_Master_Log_Pos: 445167889 Exec_Master_Log_Pos: 445167889 Seconds_Behind_Master: 0 #和上面一样 yejr@imysql.com...Seconds_Behind_Master: 0 #这时有活跃 SQL 了,Time 值是和 Seconds_Behind_Master 一样,即 SQL 线程比 IO 线程“慢”了 1 秒 yejr@imysql.com...Read_Master_Log_Pos: 445182239 Exec_Master_Log_Pos: 445175263 Seconds_Behind_Master: 1 #和上面一样 yejr@imysql.com
SQL性能瓶颈定位 现在,我们来看下这个SQL的执行计划: yejr@imysql.com[myDB]> EXPLAIN PARTITIONS SELECT ......所以,我们尝试新建一个索引: yejr@imysql.com[myDB]> ALTER TABLE t1 ADD INDEX iid (iid, icnt); 然后,把SQL改造成下面这样,再看下执行计划...: yejr@imysql.com[myDB]> EXPLAIN PARTITIONS SELECT ......事实上,如果不强制指定分区的话,也是可以达到优化效果的: yejr@imysql.com[myDB]> EXPLAIN PARTITIONS SELECT ...
该工具已发布上线到相应链接:https://imysql.com/my-state-diag.html,欢迎试用、提建议。...再说说 my.cnf生成工具(https://imysql.com/my-cnf-wizard.html) 的使用情况,下面是按月份统计,使用次数排名最靠前的10个月: mysql> select date_format
把表字符集由UTF8直接转换成UTF8MB4的几种方法: 1、只修改字符集(使用默认校验集) yejr@imysql.com> alter table t1 convert to character set...utf8mb4 2、同时修改表字符集和校验集 yejr@imysql.com> alter table t1 convert to character set utf8mb4 collate utf8mb4..._bin; 3、只修改某列的字符集 yejr@imysql.com> alter table t1 modify c1 varchar(20) character set utf8mb4 not null...default ‘’ 4、同时修改某列的字符集和校验集 yejr@imysql.com> alter table t1 modify c1 varchar(20) character set utf8mb4
可以执行指令 w 或者 sar -q 1 来查看负载数据,例如(横版查看): [yejr@imysql.com:~ ]# w 11:52:58 up 702 days, 56 min, 1 user...WHAT root pts/0 1.xx.xx.xx 11:51 0.00s 0.03s 0.00s w 或者 sar -q 的观察结果(横版查看): [yejr@imysql.com...:~ ]# sar -q 1 Linux 2.6.32-431.el6.x86_64 (yejr.imysql.com) 01/13/2016 _x86_64_ (24 CPU)...执行 sar -d 确认磁盘I/O是否真的较大(横版查看): [yejr@imysql.com:~ ]# sar -d 1 Linux 2.6.32-431.el6.x86_64 (yejr.imysql.com...MySQL层面检查确认 首先看下当前都有哪些查询在运行(横版查看): [yejr@imysql.com(db)]> mysqladmin pr|grep -v Sleep +----+----+---
1、只修改字符集(使用默认校验集) yejr@imysql.com> alter table t1 convert to character set utf8mb4 2、同时修改表字符集和校验集 yejr...@imysql.com> alter table t1 convert to character set utf8mb4 collate utf8mb4_bin; 3、只修改某列的字符集 yejr@imysql.com...alter table t1 modify c1 varchar(20) character set utf8mb4 not null default ‘’ 4、同时修改某列的字符集和校验集 yejr@imysql.com.../charset-unicode-conversion.html https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html http://imysql.com.../charset_tips http://imysql.com/utf8mb4/utf8mb4.php http://www.cnblogs.com/chenwenbiao/archive/2011/08
MySQL版本 Server version: 5.7.18-log MySQL Community Server (GPL) 看下延迟状况 yejr@imysql.com:mysql3306....查询下当前实例有多少个表分区: yejr@imysql.com:mysql3306.sock : (none) > select count(*) from partitions where partition_name
yejr@imysql.com[myDB]> EXPLAIN select uid,sum(power) powerup from t1 where date>='2017-03-31' and UNIX_TIMESTAMP...yejr@imysql.com[myDB]> ALTER TABLE t1 ADD INDEX idx_uid(uid); yejr@imysql.com[myDB]> EXPLAIN select uid
执行 sar -d 确认磁盘I/O是否真的较大(横版查看): [yejr@imysql.com:~ ]# sar -d 1 Linux 2.6.32-431.el6.x86_64 (yejr.imysql.com...31.46 7.07 1.42 0.20 100.00 再利用 iotop 确认到底哪些进程消耗的磁盘I/O资源最多(横版查看): [yejr@imysql.com...MySQL层面检查确认 首先看下当前都有哪些查询在运行(横版查看): [yejr@imysql.com(db)]> mysqladmin pr|grep -v Sleep +----+-
把我的imysql.com后台数据库换成了GreatSQL 不少朋友应该都知道我现在主要推广万里数据库即将开源的GreatSQL分支。...身体力行,先把 imysql.com 服务器后台的数据库换成GreatSQL吧,本想直接跑个MGR集群的,无奈云主机配置太低,运行几天后被搜索引擎一爬数据,给OOM(out of memory)弄挂了,...围观链接:https://imysql.com/greatsql.php 另外,在切换GreatSQL过程中,因为一开始是想用MGR集群的,因此只能使用InnoDB引擎。
因此我们执行下面的SQL,就能找到MySQL里到底谁消耗了更多内存:yejr@imysql> select event_name,SUM_NUMBER_OF_BYTES_ALLOC from memory_summary_global_by_event_name...再执行下面的SQL,查看都有哪些内部线程消耗了更多内存:yejr@imysql>select event_name, SUM_NUMBER_OF_BYTES_ALLOC from memory_summary_by_thread_by_event_name
转载 , 表别名 https://dev.mysql.com/doc/refman/5.7/en/sys-create-synonym-db.html https://blog.51cto.com/imysql
PATH=$PATH:/home/mysql/bin">>/etc/profile source /etc/profile 接下来配置my.cnf 这里推荐一个自动生成my.cnf文件的网站 http://imysql.com
mysqlinternals.blogspot.com/2015/05/list-of-background-operations-performed.html 3、《processlist中哪些状态要引起关注》,链接: http://imysql.com...,链接: http://imysql.com/2016/11/20/mysql-faq-what-cause-diskio-so-high.shtml 5、《table_open_cache 与 table_definition_cache
领取专属 10元无门槛券
手把手带您无忧上云