随笔分类 - mysql
摘要:InnoDB has a good source of information about its status which can be requested every time you need to know “what’s up” with that in your environment.
阅读全文
摘要:Because I do a lot of Performance Tuning gigs I get often in contact with these status variables. In the beginning I had a problem to understand them
阅读全文
摘要:昨天,我drop一个表的时候在checking permissions花了20s+,这个时间花在哪里了呢?经常查找发现我的配置文件innodb_file_per_table=1的,innodb需要遍历LRU链表,并且丢弃属于这个表的表空间里面的页。如果innodb buffer pool很大的话,需...
阅读全文
摘要:我们碰到有order by 或者group by,或者distinct语句的时候,如果查看执行计划,通常会看到using filesort的字眼,那么这个filesort是不是真是文件排序呢?其实不然,filesort和file没有一点关系,只是不好的代名词。如果一个语句不能在索引上完成排序,那么就...
阅读全文
摘要:语法:REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [PARTITION (partition_name,...)] [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...
阅读全文
摘要:需要学会使用percona-data-recovery-tool-for-innodb,用这个:sys_parser,参考这篇文章,
阅读全文
摘要:两次写是innodb的一个重要特性,目的是为了保证在异常down机或者没电的情况下,保证数据的安全可靠。一次是往内存的double write buffer中写,一次是在刷共享表空间的连续128个页。为什么需要double write buffer?innodb page一个页是64KB,而通常情况下都是一个页的一部分被修改,比如8KB,而其他的保持原状。而对于大多数Linux系统默认的block size是4KB,所以一个innodb page会被分成好多块,分别被刷在没写入真正的ibd文件之前,double write buffer都是顺序写;当往ibd文件刷的时候才是离散写;查看doub
阅读全文
摘要:参考印风的博客:FLUSH操作的类型,总的来说,有三种刷新类型BUF_FLUSH_LRU:表示从Buffer Pool的LRU上扫描并刷新BUF_FLUSH_LIST:表示从Buffer Pool的FLUSH LIST上扫描并刷新BUF_FLUSH_SINGLE_PAGE:从LRU上只刷新一个Page前两种属于BATCH FLUSH, 最后一种属于SINGLE FLUSHBUF_FLUSH_SINGLE_PAGE在几种情况下使用到:1.buf_flush_or_remove_page2.buf_flush_single_page_from_LRU,这在FREE LIST不够用时,IO-boun
阅读全文
摘要:1. innodb_thread_concurrencyinnodb有一系列的计数器来统计和控制内部的工作线程。其中最重要的一个是innodb_thread_concurrency,和它相关的innodb_thread_sleep_delay和innodb_concurrency_tickets。由于MySQL是插件式db,读取行的时候可以有很多方式,比如说顺序读or随机读,而DML(insert,delete,update)语句是要判断是否已经进入到了innodb线程里,如果超过了innodb_thread_concurrency的值,首先要等innodb_thread_sleep_dela
阅读全文
摘要:内存表:session 1$ mysql -urootroot@(none) 10:05:06>use testDatabase changedroot@test 10:06:06>CREATE TABLE tmp_memory (i INT) ENGINE = MEMORY;Query OK, 0 rows affected (0.00 sec)root@test 10:08:46>insert into tmp_memory values (1);Query OK, 1 row affected (0.00 sec)root@test 10:08:46>sessio
阅读全文
摘要:观察innodb的锁时间,需要关注:mysqladmin extended-status -r -i 1 -uroot | grep "Innodb_row_lock_time" Innodb_row_lock_current_waits:当前正在等待锁定的数量; Innodb_row_lock_time :从系统启动到现在锁定的总时间长度,单位ms; Innodb_row_lock_time_avg :每次等待所花平均时间; Innodb_row_lock_time_max:从系统启动到现在等待最长的一次所花的时间; Innodb_row_lock_waits :从系统启
阅读全文
摘要:昨天看到一个很有意思的死锁,拿来记录下:环境:deadlock on事务隔离级别: read commited表结构:root@test 08:34:01>show create table lingluo\G*************************** 1. row *************************** Table: lingluoCreate Table: CREATE TABLE `lingluo` ( `a` int(11) NOT NULL DEFAULT '0', `b` int(11) DEFAULT NULL, `c` int(
阅读全文
摘要:MySQL5.5原生版本,sync_binlog 1000innodb_flush_log_at_trx_commit 21. 死锁检测压测场景:一个事务里面先insert,再update,insert随意,update对同一条记录更新,并发128,循环10000次压测结果:关闭死锁检测tps:5705打开死锁检测tps:1659,结论:在对tps要求比较高的场景中关闭死锁检测很有必要,但是前提是整个涉及的场景中没有死锁,否则的话,关闭死锁检测只会起到相反的作用2. 备库延迟压测场景:尽量让主库的tps高,看主库的tps达到多少时备库开始延迟压测结果:主库的tps达到9k以上时,备库开始延迟,
阅读全文
摘要:目前生产环境的分库分表的表,含有primary key(id)的,都是由tddl分配的,而不是mysql自带的auto increment,而如果对于已经带了auto increment的,在高并发下,要比不带auto increment的有什么性能上的劣势吗? 从理论上来讲,mysql在为auto increment维护了一个表锁,即使insert的时候指定了id,也还是会触发mysql维护表锁,到底性能相差多大呢?我在mysql5.1.48上面做了一个小测试:innodb_autoinc_lock_mode = 1,关于innodb_autoinc_lock_mode的分配策略,...
阅读全文
摘要:问题: 如题分析过程:9846926 test 192.168.12.91:42638 test Query 3852 Waiting for table metadata lock==============================================================================================alter table order \n modify gmt_timeout datetime comment '超时时间' 0 0 1show engine innodb status\G可以看到:---TRA
阅读全文
摘要:前一段时间接了个业务比较特殊,它的场景是这样的:–每天入库数据量3亿左右–写多读少,每隔5分钟写入10w数据–按天分表,多年同一天的数据在一个表里–同一天的数据每隔5分钟更新一次–数据来源,经过Hadoop分析过后的csv文件--类似于这样的,会有并发同时跑,但是数据量和间隔时间不一样数据库配置:普通sas盘,24G内存,16核CPU,单实例,1主1备优化前的做法是:1. 把原来的前几分钟的数据根据日期delete掉2. 使用程序读取分析过的csv文件,拼装成insert into tbname (col1,col2,......) values (val1,val2,....,),(val.
阅读全文
摘要:今天发现的,先记录下:表结构由bigint改成varchar,改之前和改制后查询结果对比如下:先记录下
阅读全文
摘要:今天有开发反应他的建表语句错误,我看了下,提示:MySQL Error 1170 (42000): BLOB/TEXT Column Used in Key Specification Without a Key Length原因是:MySQL不允许在BLOB/TEXT,TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXT, LONGTEXT,VARCHAR建索引,因为前面那些列类型都是可变长的,MySQL无法保证列的唯一性,只能在BLOB/TEXT前n个字节上建索引,这个n最大多长呢?做个测试:root@test 03:53:58>c
阅读全文
摘要:500w的表,SELECT distinct id FROMsbtest w1 limit 10000,20;SELECT id FROMsbtest w1 group by id limit 10000,20;先记录下,group by 要比distinct速度快,distinct和group by类似,只不过distinct是先分组,再从无序分组里面取出不同的,group by是有序的
阅读全文
摘要:有这样一个业务场景,数据的写入就是回流,平常都是依赖user_id查询,数据大概5亿左右,因此我做了下测试,测试过程如下:性能测试机的环境:View Code Uptime | 364 days, 4:02, 2 users, load average: 0.43, 0.19, 0.06 Platform | Linux Release | Red Hat Enterprise Linux Server release 5.4 (Tikanga) Kernel | 2.6.18-164.el5Architecture | CPU = 64-bit, OS =...
阅读全文

浙公网安备 33010602011771号