Postgresql之HOT技术简析
背景:PG实现了MVCC,但是没有引入undo表空间,为实现多版本读,所有的update操作都插入一个新版本行(delete-marked-old + insert-new),数据行的各个版本从老到新形成一个单向链表,即update chain。pre-8.3,索引块也是采用同样的策略,即便update没有更新任何索引列,举例说明:表t有两个列(id , n...
swap空间不足导致mysql被OOM kill案例
背景:某机器内存256G,安装2实例mysql,每个 buffer_pool各106G,总计212G;某套DB晚上10:00左右迁移到该环境,第2天早上10:00左右收到OOM kill短信,因swap空间不足一个Mysql实例被强制kill;该实例mysqld进程没有被彻底清除,而是变成了僵尸进程,导致后续无法重启该实例,最后重启机器才解决。 ...
排序sql升级5.6变慢原因分析
背景: 某业务DB从5.5升级5.6后,同一sql执行时间由毫秒级飙升到了20秒,sql文本如下 select * from big_table as t where ( t.plan_TYPE = 1 or t.plan_TYPE=3 ) and t.limit_TYPE in (10) and t.xx_ID = 25773208367 and t.USER_ID in (133174222100) plan by t.gmt_create desc , t.ID desc limit 1,...
mysql localhost登录和tcp/ip登录
binlog_ignore_db陷阱之备库无法同步
问题描述:新上线的主备从库(5.5 + statement),自从备库建立并且change master指向主库后,就无法接受主库新产生的数据;备库指向show slave status,IO和SQL thread都是running并且exec_master_postion和主库的show master status输出一致;手工在主库新建一个库,新建表并插入然后提交,备库可以同步;...
http中的cookie和session概念
1 背景HTTP协议本身是无状态的,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息;具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。 2 cookie机制正统的cookie分发是通过扩...
mydumper工作原理
相比mysqldump,其优势如下:1 速度快(好多资料都说快10倍,个人持保留意见);2 支持多线程导出和导入myloader;3 采用守护进程方式运行,可定时扫描和快照binlog(-snapshot-interval);4 快速文件压缩; 也有稍许不足之处,如mydumper不处理MySQL的视图,触发器和存储过程,因此使用mydum...
tcprstat和tcpstat工作原理
1 tcprstat原理采用libpcap捕获tcp,计算请求响应时间并进行一系列聚集统计,响应时间 = diff(last inbound packet, first outbound packet);相较tcpstat,该工具侧重于响应时间而非通信流量的计算;可以直接监控网络接口(默认端口3306),或者读取tcpdump文件。 安装文件本身为二进...
mysql并发线程控制之控制thread_running数量
前面两篇帖子分别总结了innodb_thread_concurrency和thread pool的原理:前者是在存储引擎层面限制并发运行的线程数,代码路径过于靠后,此时query已在server层完成解析;后者则是在server层创建多组常驻线程,用于接收客户端连接发送的query并代为执行,而不是为每个连接单独创建一个线程。 除了这...
mysql并发线程控制之thread pool和优先队列
之前根据官方资料整理了一篇笔记,现在读起来感觉就是在凑数,在网上看到高人的一篇帖子http://www.gpfeng.com/?p=540,现在重新整理记录一下。Maria引入thread pool,percona在此基础上引入优先队列,依次对这两种特性进行描述。 1 maria实现细节 1、整个连接池内部被分成N个小的group,N默认为cp...
mysql并发线程控制之innodb_thread_concurrency的改进
innodb_thread_concurrency算法介绍:1、server层到innodb层读写数据是一条一条记录进行的,每次读写都会进/出一次InnoDB层(row_search_for_mysql),进入InnoDB层的时候会检查当前并发线程数目,当超过innodb_thread_concurrency时,线程将尝试spin和sleep并再次检查,如果并发数还是超过innodb_thread_concurrency...
tcmalloc的工作原理
Tcmalloc优势1 速度快ptmalloc在一台2.8GHz的P4机器上(对于小对象)执行一次malloc及free大约需要300纳秒。而TCMalloc的版本同样的操作大约只需要50纳秒。2 降低了锁争用TCMalloc减少了多线程程序中的锁争用情况。对于小对象,几乎已经达到了零争用。对于大对象,TCMalloc尝试使用粒度较好和有效的自旋...
seconds_behind_master的陷阱和pt-heartbeat
Seconds_behind_masterIn essence, this field measures the time difference in seconds between the slave SQL thread and the slave I/O thread.binlog中每个binlog events都会附上执行时的timestamp,MySQL将当前系统的时间戳同SQL thread正在执行的binlog event上的时间戳做比较,这个差值就Seconds_Behin...
memcache的item key和序列化
一个完整的item长度是键长+值长+后缀长+item结构大小(32字节),item操作就是根据这个长度来计算slab的classid的。 +---------------------------------------+ | key-value | cas | suffix | item head | +---------------------------------------+ 其中suffix的格式是 flag...
mysql_proxy工作原理和配置参数
Mysql服务器和客户端建立连接过程如下 认证通过,客户端发起查询请求,服务器可能返回3种结果; 图片来源http://blog.sina.com.cn/s/blog_98cb2d960100zs0e.html Mysql-proxy作为一个代理,工作于mysql客户端和服务器之间(对两者皆透明); http://dev.m...
mysql replication之GTID
原理 5.6引入,在整个复制拓扑结构内,每个事务拥有自己全局唯一标识,,每个GTID对应一个事务;。 GTID包含两个部分,一部分是实例的UUID,另一部分是实例内递增的整数,GTID = server_uuid:transaction_id,。 注:第一次启动mysql会生成server_uuid并存于数据目录的auto.cnf; 一旦GTID对应的事务被执...
table_map_event和table_id
row-based replication引入此事件TABLE_MAP_EVENT:The TABLE_MAP_EVENT defines the structure if the tables that are about to be changedrow模式下,主库的DML对应一个table_map_event和一系列INSERT/UPDATE/WRITE_ROWS_EVENT;table_map_event对应的class是Table_map_log_event(对应源码sql/log_event.cc),它保...
mysql semi-sync的演化
5.5引入semi-sync,当master事务提交后,由dump将对应binlog传给slaves,至少收到一个slave的ACK确认,master才返回给用户线程; 注意事项 1 slave ACK只代表io_thread已记录relay_log,并不意味着sql_thread已经执行;2 master的事务commit后才传输给slave,如果此时master crash,会出现主备数...
mysql多线程slave的演化
主要参考链接 http://www.csdn.net/article/2015-01-16/2823591 淘宝内部分享:怎么跳出MySQL的10个大坑 之 MySQL · 优化改进· 复制性能改进过程pre-5.6 ,sql_thread的执行堆栈如下,sql_thread:exec_relay_log_event ...
mysql loose index scan的实现
Loose index scan 各种资料关于loose index scan的解释很拗口,其实等同于oracle的index skip scan。 对于复合索引(sex, id),前导列sex的值只有两个:M和F, (`F',98) (`F',100) (`F',102) (`F',104) (`M',101) (`M',103) (`M',105) 则索引可以逻辑的分成两个子索引 ...