mysql
深圳gg
这个作者很懒,什么都没留下…
展开
-
MySQL5.6.35的bug
有一个系统,当在应用层面开启Job的时候,数据库就会宕机,Job里面是往一个表里面插入一些数据。错误日志如下: 2019-11-11 15:56:26 114028 [Note] /home/mysql/bin/mysqld: ready for connections.Version: ‘5.6.35-log’ socket: ‘/tmp/mysql.sock’ port: 33...原创 2019-11-12 18:00:11 · 715 阅读 · 0 评论 -
MySQL exists还是慎用
不管是MariaDB还是Oracle的MySQL,如果外面的表很大,要慎用exists。select version();+-----------------+| version() |+-----------------+| 10.1.22-MariaDB |+-----------------+EXPLAIN SELECT CAC.* FROM TOP_原创 2018-01-25 16:16:15 · 2401 阅读 · 0 评论 -
减少表扫描的经典写法
优化前:SELECT IFNULL(SUM(charge_quantity), 0) chargeQuantityTotle, COUNT(1) num, DATE_FORMAT(SYSDATE(), '%d') DAY FROM gg_BM_O_ORDER WHERE IS_DELETE AND order_state IN (3, 4)原创 2018-01-16 15:35:44 · 276 阅读 · 0 评论 -
MySQL5.6 视图谓词无法推进的问题
最近优化MySQL5.6的SQL语句,对视图的优化不能让人满意,谓词无法推进,下面有两个例子。以后用视图得小心了,一定要看执行计划。样例1:视图定义如下: SHOW CREATE TABLE view_site_car ;select m_site . SITE_CODE AS site_code, ifnull(group_concat(gg_car_model原创 2018-01-16 15:24:15 · 471 阅读 · 0 评论 -
MySQL执行计划顺序需要注意的地方
SQL执行计划顺序是:id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行。不过,对于标量子查询,并非是id值越大,越先执行。如下面的执行计划顺序是:r(1)->o(1)->ds(1)->(icd(3)+d(2))EXPLAIN SELECT ds . OPERATING_UNIT_CODE AS OPERATING_UNIT_CODE,原创 2018-01-16 11:47:09 · 1834 阅读 · 0 评论 -
MySQL SQL一种常用的优化方法
下面的SQL 20多秒。如何优化:SELECT ................ FROM gg_bm_o_order o_order LEFT JOIN gg_bm_u_app_user app_user ON app_user.user_code = o_order.user_code LEFT原创 2018-01-22 17:57:29 · 580 阅读 · 0 评论 -
mysql 慢日志分析工具pt-query-digest
之前windows下mysql5.6.20使用mysqldumpslow.pl分析慢日志,今天又看到一个工具pt-query-digest,原本打算在windows上安装使用,结果在windows上执行C:\Program Files\MySQL\MySQL Server 5.6\bin>pt-query-digest.pl F:\mysql\im-slow.log > F:\mysql\s原创 2015-08-13 15:08:47 · 4449 阅读 · 0 评论 -
MySQL 5.6 not in 和表关联性能测试对比
对比的结果是加索引的情况下,最好是选择表关联。在建立了索引的情况下,我认为not in跟表关联的区别是什么呢?两者的表关联都是nestloop算法,但not in对驱动表是全表扫描,而表关联是可以用到索引的,这是最大的区别。mysql> select version();+------------+| version() |+------------+| 5.6.37-log原创 2017-12-22 11:37:33 · 722 阅读 · 0 评论 -
Mysql5.7 in,exists,表直接关联性能比较
mysql> select version();+-----------+| version() |+-----------+| 5.7.9-log |+-----------+1 row in set (0.00 sec)制造数据DROP TABLE IF EXISTS test; CREATE TABLE test( ID INT(10) N原创 2017-06-19 15:03:43 · 2279 阅读 · 0 评论 -
MySQL5.6的10053,CBO如何选择执行计划
mysql> select version();+------------+| version() |+------------+| 5.6.24-log |+------------+1 row in set (0.00 sec)mysql> create table a (c1 int);Query OK, 0 rows affected (0.32 se原创 2017-08-22 15:54:30 · 951 阅读 · 0 评论 -
MySQL5.6半同步复制配置及实验
MySQL5.5之前是异步复制,主库上写入事务并成功提交之后就返回给用户成功。如果主库的binlog还没有来得及传给从库,这样会造成主从数据不一致。MySQL5.5引入了半同步复制机制,主库上commit之后,b并不及时反馈给前端用户,而是等待其中的一个从库接收到binlog并成功写入中继日志后,主库才返回commit操作成功给客户端。半同步复制保证了事务成功提交后,至少有两份日志记录,一份在主库原创 2017-07-04 15:25:19 · 2107 阅读 · 0 评论 -
MySQL5.6找到临时表用到磁盘的SQL
mysql> select version();+------------+| version() |+------------+| 5.6.14-log |+------------+mysql> show global status like 'Created_%_tables';+-------------------------+-------+| Var原创 2017-06-14 14:57:19 · 1969 阅读 · 0 评论 -
MySQL5.6 运用临时表做SQL优化
有一个系统从Oracle迁移到MySQL,在Oracle中运行很快,在MySQL基本运行不出来(等了10分钟都无法运行出来),该加的索引都加了,最后用临时表解决问题。SELECT COUNT(1) FROM (SELECT a.vendor_id FROM g_VENDOR a LEFT JOIN g_VENDOR_CONTACT_PERSON b ON a.ven原创 2017-06-21 17:31:37 · 1421 阅读 · 0 评论 -
2018-1-11Mysql SQL性能优化
在高并发下面,下面的SQL有严重的性能问题。# User@Host: gg[gg] @ [xx.xx.xx.xx] Id: 28927# Query_time: 224.879036 Lock_time: 0.000542 Rows_sent: 1 Rows_examined: 93633EXPLAIN SELECT ... CASE WHE原创 2018-01-16 16:35:59 · 312 阅读 · 0 评论 -
MySQL消除排序有多重要!
这条SQL是查出来所有的数据,然后对所有的数据进行排序,最后取出50条数据。SELECT ... FROM IC_RC_CONTROL_COMMAND c, IC_OM_DM_CHARGING_PILE cp, ic_rc_control_command_item ci WHERE c.`CONTROL_COMMAND_ID` = ci.`CONTROL_COMMAND_ID原创 2018-01-17 15:58:37 · 1406 阅读 · 0 评论 -
mydumper备份恢复
https://launchpad.net/mydumper/+downloadyum install glib2-devel mysql-devel zlib-devel pcre-devel openssl-develmysql> select version();±-----------+| version() |±-----------+| 5.6.37-log |...原创 2019-03-19 10:13:45 · 914 阅读 · 0 评论 -
MySQL5.7 Waiting FOR TABLE FLUSH
系统不能使用,数据库上99%的会话等待是Waiting FOR TABLE FLUSH,找到等待时间最长的会话kill,系统恢复正常。是什么原因造成的呢?日志分析:Time: 2018-12-15T10:45:50.116723+08:00User@Host: gg[gg] @ [10.92.221.131] Id: 9435656Query_time: 58475.741298 L...原创 2018-12-21 15:48:54 · 1579 阅读 · 0 评论 -
MySQL5.7 Waiting for global read lock
系统报故障不能使用,从应用的日志上分析:Cause: java.sql.SQLException: The MySQL server is running with the --read-only option so it cannot execute this statementshow processlist可以看到 99%的(3200个)会话报Waiting for global rea...原创 2018-12-21 15:26:57 · 7470 阅读 · 0 评论 -
MySQL 5.7定位消耗CPU高的SQL
MySQL 5.7.231.先查看CPU飙高的线程,top -H -p <mysqld进程id>top - 15:09:26 up 135 days, 7:11, 2 users, LOAD average: 0.12, 0.08, 0.02Tasks: 34 total, 1 running, 33 sleeping, 0 stopped, 0 zombi...原创 2018-10-19 15:24:45 · 7408 阅读 · 0 评论 -
MySQL 5.7 优化不能只看执行计划
就这么一条SQL要40s,看执行计划,发现rows很小,神奇了。SELECT T1.* FROM(SELECT T.*, R.LOCATION_DEPART_ID AS locationDepartId, CASE WHEN T.INVENTORY_TYPE = 1 THEN f_fm_getFullLocationName(R.LOCATION_DEPART_ID, '5...原创 2018-06-08 10:23:31 · 1681 阅读 · 0 评论 -
MySQL5.7被一条排序SQL弄宕机
数据库被一条排序的SQL搞宕机,每次毕现,表只有一条记录(表定义比较长),且表文件既有几百k。错误日志:04:58:38 UTC - mysqld got exception 0xc000001d ;This could be because you hit a bug. It is also possible that this binaryor one of the libraries it ...原创 2018-06-22 11:06:12 · 2039 阅读 · 1 评论 -
MySQL 5.6建索引的正确姿势
create index ind_t_object_id on test(object_id); 一直hang住,10分钟没有反应,看了一下后台有什么问题: SHOW PROCESSLIST; Waiting for table metadata lock 换了下面的这个秒出: ALTER TABLE test ADD INDEX ind_t_object_id(object_id);...原创 2018-06-06 15:14:56 · 1637 阅读 · 0 评论 -
MySQL压力测试SHOW VARIABLES过多
系统做压力测试,数据库产生了性能瓶颈,MySQL压力测试SHOW VARIABLES过多。# Rank Query ID Response time Calls R/Call V/M Item# ==== ================== ================ ===== ====== ===== ============# 1 0xC69B...原创 2018-05-07 10:35:23 · 1761 阅读 · 0 评论 -
MySQL in max的优化
MySQL in max的优化,循环的次数从1361*124降到124*1,性能大大提升。SELECT 0 AS initalBalance, 0 AS receivabeBills, 0 AS receivabeFee, 0 AS paidUpBills, 0 AS paidUpFee, SUM(IFNULL(gg.CLOSING...原创 2018-02-26 18:16:22 · 627 阅读 · 0 评论 -
MySQL innodb count(*) count(1) 性能比较
有写文章说尽量不要用count(*),这样性能不好。那今天来实测一下,从执行计划,转换后的SQL和Last_query_cost三个方面说事。注:这个值说明需要多少个数据页的随机查找才能完成上面的查询。这是根据一系列的统计信息计算得来的:每个表或者索引的页面个数,索引的基数(索引中不同值的数量),索引和数据行的长度、索引分布情况。优化器在评估成本的时候并不考虑任何层面的缓存,它假设读取任何数据都需原创 2018-01-29 18:09:12 · 1220 阅读 · 0 评论 -
MySQL GROUP BY WITH ROLLUP
类似Oracle中的rollup,不同的是不能排序,select后面查询的字段可以不是group by的字段。SELECT a.actor_id,COUNT(1) cc FROM film_actor a,actor b WHERE a.actor_id=b.actor_id AND a.actor_idGROUP BY actor_id WITH ROLLUP;+-----原创 2018-02-02 10:46:51 · 756 阅读 · 0 评论 -
Mysql5.6 借助工具pt-online-schema-change在线DDL(还有加索引)
MySQL在线ddl会阻塞所有insert,可以使用percona-toolkit中的pt-online-schema-change工具来对表进行online。D=tpcctest 数据库名t=customer 表名[root@localhost bin]# ./pt-online-schema-change -u root -h127.0.0.1 -proot --alter=原创 2017-06-12 16:16:58 · 1876 阅读 · 0 评论 -
MySQL5.6几种建索引方式比较
mysql> select version();+-----------+| version() |+-----------+| 5.6.17 |+-----------+mysql> CREATE TABLE test AS SELECT * FROM information_schema.columns;mysql> INSERT INTO test SEL原创 2017-06-29 15:42:43 · 1327 阅读 · 0 评论 -
mysql如何快速删除重复的数据
在mysql中去重,其实是一个很简单的事情,来看下面的例子:mysql> DROP TABLE test;Query OK, 0 rows affected (0.01 sec)mysql> CREATE TABLE test ( id INT, NAME VARCHAR(10) );Query OK, 0 rows原创 2015-08-28 14:50:48 · 2095 阅读 · 0 评论 -
mysql检测重复索引
mysql居然可以在相同的字段上重复建索引,oracle是不行的。需要安装pt-query-digest。[root@VM-10 ~]# pt-duplicate-key-checker -h10.10.11.208 -uroot -proot -P3316 --charset=gbk # ##################################################原创 2015-08-27 18:04:49 · 1622 阅读 · 0 评论 -
mysqlreport的使用
mysql参数怎么调是个问题,如果是Oracle,数据库报告上有很多建议,非常直观。mysql也有一个小工具mysqlreport,来统计一些信息指导调参数,最好是写一个任务,一个小时执行一次,这样可以看到高峰、低峰时期的统计信息,更有利于参数调优。1.先下载dbi、dbd-mysql、mysqlreport-3.5。2.安装dbi和dbd-mysql,安装之前确认安装过perl。原创 2015-08-26 17:40:36 · 1061 阅读 · 0 评论 -
windows下mysql5.6.20使用mysqldumpslow.pl分析慢日志
要想运行mysqldumpslow.pl(这是perl程序),下载perl编译器。下载地址:http://pan.baidu.com/s/1i3GLKAp 就是ActivePerl_5.16.2.3010812913.msi,一步一步安装后,将bin加入环境变量path。 现在假设一个场景:现场的slow.log拿回来了,要在本地的windows环境上的mysql上分析,如原创 2015-07-29 15:55:02 · 4804 阅读 · 0 评论 -
mysql的INNODB引擎锁的原理试验
mysql的INNODB引擎锁的原理是怎样的,来做个试验。mysql> SELECT VERSION();+-----------+| VERSION() |+-----------+| 5.5.20 |+-----------+1 row in set (0.00 sec)CREATE TABLE test ( a INT(5), b V原创 2014-10-20 17:01:51 · 1348 阅读 · 0 评论 -
mysql性能调试工具profile
我一直在找mysql中有没有类似Oracle 10046类似的工具,可以看到SQL执行的时间消耗在哪里。终于在网上找到一个profile,使用一些,觉得不错。mysql> select version();+-----------+| version() |+-----------+| 5.6.16 |+-----------+1 row in set (0.00原创 2014-08-14 19:58:53 · 1714 阅读 · 0 评论 -
having在Oracle和mysql中的一点不同点
在Oracle中,having一定要结合group by使用,但在mysql中,情况就不一样了,可以单独使用。C:\Documents and Settings\guogang>sqlplus test/testSQL*Plus: Release 10.2.0.1.0 - Production on 星期二 8月 12 09:09:58 2014Copyright (c) 1982,原创 2014-08-12 09:13:44 · 1460 阅读 · 0 评论 -
mysql5.6.16下跟踪SQL查询转换的结果
当SQL执行时,会做一些查询转换,你看到的SQL很可能被转换为其他的形式的SQL执行(有视图重写,查询转换,谓词推进等)。在Oracle下,可以通过10053跟踪SQL语句。在mysql下,可以通过设置optimizer_trace来实现。mysql> select version();+-----------+| version() |+-----------+| 5.6.1原创 2014-08-08 14:26:30 · 1518 阅读 · 0 评论 -
mysql书籍
MySQL技术内幕mysql使用大全,可以说方方面面都包括了。认真研读大概一本就差不多了MySQL开发者SQL权威指南这本应该是mysql的sql天书了。学mysql的sql语句,本书必不可少,缺点是看着有点别扭。高性能MySQL高可用MySQL:构建健壮的数据中心上面这俩本应该是提级必转载 2014-04-22 10:35:14 · 1241 阅读 · 0 评论 -
为什么互联公司都用MySQL非oracle,难道只是便宜
VAGE:当数据量太大、并发太高时,有两种解决方案:1、仍然使用集中式方案,提升单台主机的能力。2、使用分布式方案。两种方式都可以解决问题,就看高层如何选择了。阿里选择了分布式。一旦选择了分布式,比如将一个大表分到多个数据库中。如果是Oracle,数据库太多license费用随之上升。如果是MySQL,数据库再多也不用担心License问题。所以,MySQL胜出。而Ha转载 2014-05-04 15:56:59 · 2370 阅读 · 1 评论 -
mysql中实现类似oracle的SYS_CONNECT_BY_PATH功能
oracle中的SYS_CONNECT_BY_PATH函数为开发带来了便利,mysql中如何实现类似的功能呢?DELIMITER $$CREATE FUNCTION `getParentList` (rootId VARCHAR (50)) RETURNS VARCHAR (1000) BEGIN DECLARE sParentList VARCHAR (1000) ;原创 2014-04-02 12:49:30 · 6004 阅读 · 1 评论 -
mysql建索引要注意了
昨天看到现场有一张表索引建的不对,调整了一下,并发性提高了很多。CREATE TABLE `test` ( `version_id` varchar(40) COLLATE utf8_bin NOT NULL, `type` varchar(20) COLLATE utf8_bin DEFAULT NULL, `version_num` int(11) NOT NULL,原创 2015-09-01 15:13:41 · 1598 阅读 · 1 评论