摘要:一、大表的大数据量修改 问题: 1、大量的行级锁,长时间阻塞 2、主从延时,大批数据不一致 解决方法: 分批次修改 二、大表的表结构修改 问题:长时间锁表 解决方法: 1、从库修改,主从切换,主库修改 (主从切换有风险) 2、建新表; 旧表数据导入到新表;旧表加触发器把新数据同步到新表;旧表加排他锁
阅读全文
摘要:一、二进制日志 二进制日志,记录所有对库的修改,如update、修改表结构等等 需要开启二进制日志的原因: 1、主从复制都是通过二进制日志进行。主库写二进制日志,传输到从库,从库replay二进制日志 2、发现异常操作需要回退, 又没有合适的备份时候,可以通过分析二进制日志来逆向操作 二、数据备份
阅读全文
摘要:一、锁 二、什么情况出现阻塞 1、频繁更改的表,出现了慢查询 2、频繁访问的表,出现了备份等(表级锁) 三、查看运行情况 四、关键参数 innodb_buffer_pool_size: 缓存区大小,既缓存索引,又缓存数据; 应尽可能大,最大=总内存-(每个线程需要内存*连接数) - 系统保留内存
阅读全文
摘要:吞吐量(单位时间内多少次查询) MTBF(平均失效时间) MTTR(平均恢复时间) 1、profile剖析,用pt-query-digest为工具 2、慢查询日志 1、库表结构 2、索引 3、查询语句 1、主从复制(增加读负载) 2、按业务划分 3、分片(增加写负载)
阅读全文
摘要:http://blog.jobbole.com/24006/ 数据库用作索引的数据结构B+树有几个特点: 1、每个节点比较大,包含了很多个键值;每个节点子节点很多,总体而言的目的都是为了降低读取节点的次数(降低io时间) 2、同一高度的节点之间,建立横向的指针。这样便于做 >5&&<10 这样的区间
阅读全文
摘要:单列的数字主键一般有三种:一、自增主键如果是用多个数据库时候,可以调整数据库自增主键的起始值以及step大小。pro: 简单实现;可以代表插入时间早晚;con:必须实际插入后才能拿到主键数,从而导致效率低;用多个数据库后,无法保证数据库间的数据有序二、uuidpro:全时空唯一,撞车概率很低很低;加...
阅读全文
摘要:sql可以看成是面向过程的编程语言。该语言中,有string、date、table这样的类型等等一、操作表sql相当于一个函数,输入是两个或多个表(A, B, ...)求集合:并集 union/union all交集 inner join差集 exceot/except allA+交集 ...
阅读全文
摘要:sql优化最重要的一点就是要建立合适的索引,据说50%以上的效率问题都是通过这个方法解决。引用国内一位资深的ORACLE专家的话:"我其实只懂点(挨踢)知识,IT里面其实只懂点甲骨文,甲骨文里面其实只懂点数据库,数据库里面其实只懂点SQL,SQL里面其实只懂点索引"sql优化思路:一、从设计上贴近业...
阅读全文
摘要:数据库的设计过程很像程序设计过程,分 需求分析、逻辑设计、物理设计、具体实现四步其中,需求分析和逻辑设计是通用的,而物理设计、实现是跟具体使用的数据库相关。一、需求分析 不细说二、逻辑设计 主要包括 E-R模型图 -〉 表 -〉 范式化 如何画E-R模型图? 1、找出全部实体和属性(名词表示...
阅读全文
摘要:写sql的思路不同于常规编程语言(C、python)等等。前者,考虑如何一步步地得到最终答案;后者,考虑如何一步步地收缩数据范围。简而言之,前者是面向过程化(for each row do x),后者是面向集合(do all -> another all)。具体来讲,写sql从两种角度考虑:一、集合...
阅读全文