- 浏览: 7949202 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
1 关于全表扫描
如果要找的记录有高选择性,可以用索引;但如果找出来的数据量占总记录很大,比如超过20%,
则优化器不会使用索引了,而是全表扫描。
2 顺序读:是指根据索引的叶结点就能顺序地读取所需要的数据,只是逻辑上的,在物理磁盘上可能是随机读,但物
理上的数据还是比较有顺序的。随机读:指访问辅助索引叶点不能完全得到结果,需要根据辅助索引叶结点中的
主键去找实际行数据。
3 辅助索引的优化:辅助索引的叶结点包含主键,但并不包含完整的行信息,innodb总会先从辅助索引的叶结点去判
断是否能得到所需要的数据
4 联合索引:好处是可以对第2个键值进行排序,例如我们需要查询某个用户的购物情况,并按时间排序,取出最近三
次的购买记录,可以使用
联合索引避免多一次的排序操作,因为索引本身在叶结点中已经排序了
5 MYISAM中的锁是表锁,INNODB中提供非锁定读,行级锁的支持,没相关的开销。实现如下两类型的行级锁:
S 共享锁,允许事务读一行数据 排他锁 X,允许事务删除或更新一行数据
意向锁为表级的锁,目的是为了在一个事务中揭示下一行将被请求的锁的类型,有两种:
意向共享锁IS LOCK:事务要获得一个表中某几行的共享锁
意向排他锁IX LOCK,事务要获得一个表中某几行的排它锁
查看命令:show engine innodb status\G,在transcations部分,可以看到比如select * from t where a<4
lock in share mode的字句
在新的innodb plugin中,在information_schema下有innodb_trx,innodb_locks,innodb_lock_watis三张表,能
具体查看锁的具体信息:
6 一致性的非锁定读操作
通过多版本控制的方式读取当前执行时间数据库中的行数据,如果读取的行数据有执行delete,update操作,则
读取的操作不会因此而等待行上的锁释放,相反,会读取行的一个快照数据。
三种行锁的设计:
1) record lock:单个行上的锁
2) 间隙锁:锁定一个范围,但不包含记录本身
3) next-key lock:锁定一个范围,并且锁定记录本身
INNODB默认的事务隔离级别为read repeatable,sql server和oracle的为read commited;而innodb中,用
innodb_lock_wait_timeout来控制锁的等待时间,默认为50秒,为一个动态数,可以修改,
innodb_rollback_on_timeout设置是否在等待超时后对事务进行回滚
7 事务中
计算TPS的方法:(com_coomit+com_rollback)/time ,但方法的前提是所有的事务必须都是显式提交的,如果存
在隐式的提交和回滚,不会计算到com_commit和com_rollback
show global status like 'com_commit'\G;
查看当前会话的事务隔离级别,可以用:
select @@tx_isolation\G;
查看全局: select @@global.tx_isolation\G;
另外,在存储过程中,最好不要使用declare exit handler for sqlexception来处理异常,应该由程序去处理异常
8 备份
1)逻辑备份
mysqldump --all-databases >dump.sql //备份所有数据库
mysqldump --databases db1 db2 db3>dump.sql //备份指定的数据库
备份时,用参数--single-transcation ,备份前,先执行start transcation命令,获得备份时的一致性,只对
innodb 有效果。
--lock-tables:只对myisam表有效
--local-all-tables:对所有表上锁
2)备份二进制文件
[mysqld]
log-bin
sync_binlog=1
innodb_support_xa=1
恢复二进制文件
mysqlbinlog binlog.0001 |mysql -uroot -p test
2)热备工具 xtrabackup
./xtrabackup --backup //完全备份
实现增量备份
先完全备份: ./xtrabacup --backup
然后记下LSN
./xtrabackup --prepare
./xtrabackup --backup --incremental=LSN号
9 性能调优
1) 如果是多核的话,可以修改innodb_read_io_threads和innodb_write_io_threads来增大线程,充分利用多核
2)内存方面,看innodb的命中率
show global status like 'innodb%read%'\G;
参数含义如下:
innodb_buffer_pool_reads:表示从物理磁盘读取页的次数
innodb_buffer_pool_read_ahead:预读的次数
innodb_buffer_pool_read_ahead_evicted:预读的页,但是没有被读取就从缓冲池中被替换的页的数量,一般
用来判断预读的效率
innodb_buffer_pool_read_requests:从缓冲池中读取页的次数
innodb_data_read:总共读入的字节数
innodb_data_reads:发起读取请求的次数,每次读取可能需要读多少个页
缓冲池命中率=innodb_buffer_pool_read_requests/
(innodb_buffer_pool_read_requests+innodb_buffer_pool_read_ahead+ innodb_buffer_pool_reads)
平均每次读取的字节数=innodb_data_read/innodb_data_reads
3)测试工具sysbench,分为prepare,run和clean三个阶段
比如:
sysbench --test=fileio --file-num=16 --file-total-size=2G prepare
产生16个文件
然后测试随机读取新能
sysbench --test=fileio --file-total-size=2G --file-test-mode=rndrd-max-time=180 --max-
requests=1000000 --num-thread=16 --init-rng=on
最后要cleanup
sysbench --test=fileio --file-num=16 --file-total-size=2G cleanup
4) tpc测试工具 tpcc-mysql
tpcc-c的性能单位是tpmC,transcation per minute的缩写。
win下的测试工具在:http;//code.google.com/p/david-mysql-tools/download/list
如果要找的记录有高选择性,可以用索引;但如果找出来的数据量占总记录很大,比如超过20%,
则优化器不会使用索引了,而是全表扫描。
2 顺序读:是指根据索引的叶结点就能顺序地读取所需要的数据,只是逻辑上的,在物理磁盘上可能是随机读,但物
理上的数据还是比较有顺序的。随机读:指访问辅助索引叶点不能完全得到结果,需要根据辅助索引叶结点中的
主键去找实际行数据。
3 辅助索引的优化:辅助索引的叶结点包含主键,但并不包含完整的行信息,innodb总会先从辅助索引的叶结点去判
断是否能得到所需要的数据
4 联合索引:好处是可以对第2个键值进行排序,例如我们需要查询某个用户的购物情况,并按时间排序,取出最近三
次的购买记录,可以使用
联合索引避免多一次的排序操作,因为索引本身在叶结点中已经排序了
5 MYISAM中的锁是表锁,INNODB中提供非锁定读,行级锁的支持,没相关的开销。实现如下两类型的行级锁:
S 共享锁,允许事务读一行数据 排他锁 X,允许事务删除或更新一行数据
意向锁为表级的锁,目的是为了在一个事务中揭示下一行将被请求的锁的类型,有两种:
意向共享锁IS LOCK:事务要获得一个表中某几行的共享锁
意向排他锁IX LOCK,事务要获得一个表中某几行的排它锁
查看命令:show engine innodb status\G,在transcations部分,可以看到比如select * from t where a<4
lock in share mode的字句
在新的innodb plugin中,在information_schema下有innodb_trx,innodb_locks,innodb_lock_watis三张表,能
具体查看锁的具体信息:
6 一致性的非锁定读操作
通过多版本控制的方式读取当前执行时间数据库中的行数据,如果读取的行数据有执行delete,update操作,则
读取的操作不会因此而等待行上的锁释放,相反,会读取行的一个快照数据。
三种行锁的设计:
1) record lock:单个行上的锁
2) 间隙锁:锁定一个范围,但不包含记录本身
3) next-key lock:锁定一个范围,并且锁定记录本身
INNODB默认的事务隔离级别为read repeatable,sql server和oracle的为read commited;而innodb中,用
innodb_lock_wait_timeout来控制锁的等待时间,默认为50秒,为一个动态数,可以修改,
innodb_rollback_on_timeout设置是否在等待超时后对事务进行回滚
7 事务中
计算TPS的方法:(com_coomit+com_rollback)/time ,但方法的前提是所有的事务必须都是显式提交的,如果存
在隐式的提交和回滚,不会计算到com_commit和com_rollback
show global status like 'com_commit'\G;
查看当前会话的事务隔离级别,可以用:
select @@tx_isolation\G;
查看全局: select @@global.tx_isolation\G;
另外,在存储过程中,最好不要使用declare exit handler for sqlexception来处理异常,应该由程序去处理异常
8 备份
1)逻辑备份
mysqldump --all-databases >dump.sql //备份所有数据库
mysqldump --databases db1 db2 db3>dump.sql //备份指定的数据库
备份时,用参数--single-transcation ,备份前,先执行start transcation命令,获得备份时的一致性,只对
innodb 有效果。
--lock-tables:只对myisam表有效
--local-all-tables:对所有表上锁
2)备份二进制文件
[mysqld]
log-bin
sync_binlog=1
innodb_support_xa=1
恢复二进制文件
mysqlbinlog binlog.0001 |mysql -uroot -p test
2)热备工具 xtrabackup
./xtrabackup --backup //完全备份
实现增量备份
先完全备份: ./xtrabacup --backup
然后记下LSN
./xtrabackup --prepare
./xtrabackup --backup --incremental=LSN号
9 性能调优
1) 如果是多核的话,可以修改innodb_read_io_threads和innodb_write_io_threads来增大线程,充分利用多核
2)内存方面,看innodb的命中率
show global status like 'innodb%read%'\G;
参数含义如下:
innodb_buffer_pool_reads:表示从物理磁盘读取页的次数
innodb_buffer_pool_read_ahead:预读的次数
innodb_buffer_pool_read_ahead_evicted:预读的页,但是没有被读取就从缓冲池中被替换的页的数量,一般
用来判断预读的效率
innodb_buffer_pool_read_requests:从缓冲池中读取页的次数
innodb_data_read:总共读入的字节数
innodb_data_reads:发起读取请求的次数,每次读取可能需要读多少个页
缓冲池命中率=innodb_buffer_pool_read_requests/
(innodb_buffer_pool_read_requests+innodb_buffer_pool_read_ahead+ innodb_buffer_pool_reads)
平均每次读取的字节数=innodb_data_read/innodb_data_reads
3)测试工具sysbench,分为prepare,run和clean三个阶段
比如:
sysbench --test=fileio --file-num=16 --file-total-size=2G prepare
产生16个文件
然后测试随机读取新能
sysbench --test=fileio --file-total-size=2G --file-test-mode=rndrd-max-time=180 --max-
requests=1000000 --num-thread=16 --init-rng=on
最后要cleanup
sysbench --test=fileio --file-num=16 --file-total-size=2G cleanup
4) tpc测试工具 tpcc-mysql
tpcc-c的性能单位是tpmC,transcation per minute的缩写。
win下的测试工具在:http;//code.google.com/p/david-mysql-tools/download/list
发表评论
-
mybatis generator中的字段大小写生成问题
2017-10-22 19:35 11408mybatis generator插件中,如果 mysql数据 ... -
MySQL统计一个列中不同值的数量
2017-07-11 14:04 16295https://yiqiwuliao.com/post/mys ... -
mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
2017-03-02 09:44 1805权限问题,授权 给 root 所有sql 权限 mysql ... -
几个不错的MYSQL 优化TIPS
2016-11-19 12:30 821图片来自http://imysql.com/的PDF分享 [ ... -
powerdesign 逆向ORACLE的坑
2016-09-27 17:08 577要注意的是,在WIN 64中,如果要用powerdesin 来 ... -
( 转)mysql中删除两条重复记录中的一条
2015-10-19 20:19 1339| id | createTime | labId | pub ... -
mysql中sql语句=,>的时候的索引设置
2015-05-02 12:27 1314在 https://www.percona.com/blog/ ... -
mysql中profile的使用
2015-04-30 11:11 2238mysql 的 sql 性能分析器主要用途是显示 sql 执行 ... -
mysql中的sql mode
2015-04-13 11:29 1161mysql sql mode小结 1 sql mode可以 ... -
PROCEDURE ANALYSE()为mysql提高性能提供建议
2015-04-02 16:37 1478procedure analyse();语法如下 select ... -
mongodb中意外退出的问题
2015-02-11 14:32 1345mongodb启动的时候,意外退出: Unclean shut ... -
mysql 5.5中保留字查询
2014-06-05 23:16 1493mysql 5.5中保留字查询 http://www.5is ... -
(转)oracle 临时表空间的增删改查
2014-03-18 12:44 1152oracle 临时表空间的增删改查 1、查看临时表空间 (d ... -
pl-sql developer安装
2014-02-07 09:16 1140一直都是机器本机上有oracle,所以装pl sql deve ... -
oracle中的nvl,nvl2等参数
2013-12-26 11:18 22941.nul函数将一个null值转换为一个实际的值。 数据类型可 ... -
Oracle中的ROWNUM rowid 以及MySQL中实现rownum功能类似的语句
2013-12-26 11:08 2370http://gong-10140.iteye.com/blo ... -
ORACLE XE版本的限制
2013-12-07 08:11 368210g中用户数据最大为4G, 11G中最大为11G,如果超出大 ... -
oracle中监控索引是否可用
2013-11-04 07:22 1089在oracle中,可以使用如下的方法监控索引是否可用: a ... -
mysql 5.6中的时间类型的新精度介绍
2013-10-28 09:33 8422留意到mysql 5.6中,可以使用select now(6) ... -
<<oracle索引技术》读书笔记1
2013-08-25 16:23 1332expert indexing in oracle datab ...
相关推荐
MySQL技术内幕InnoDB存储引擎-读书笔记.pdf
Mysql 的InnoDB引擎的相关笔记 1.0.MySQL架构到innoDB架构.md 1.1.0.InnoDB——简介.md 1.1.1.InnoDB——关键特性.md 1.2.0.InnoDB内存结构——缓冲池.md 1.2.1.InnoDB内存结构——log buffer.md 1.2.2.InnoDB内存...
最近在学习MySQL技术内幕 InnoDB存储引擎 第2版,整理了一些文档分享出来,同时也方便以后查看。若有不当之处,烦请批评指正。 1. MySQL体系结构和存储引擎 2. InnoDB存储引擎 2.1 InnoDB体系结构 2.2 ...
与前一版相比,第2版不仅针对最新的MySQL 6对相关内容进行了全面的补充,还根据广大读者的反馈意见对第1版中存在的不足进行了完善,《MySQL技术内幕:InnoDB存储引擎》大约重写了50%的内容。 《MySQL技术内幕:...
Mysql innodb存储引擎内幕,作者姜承旭
读书笔记:《高性能MySQL》《MySQL技术内幕InnoDB存储引擎》阅读笔记
MySQL InnoDB 技术内幕 MySQL InnoDB 存储引擎是 MySQL 关系数据库管理系统中最常用的存储引擎之一。InnoDB 存储引擎是 MySQL 的默认存储引擎,它提供了高性能、高可靠性的存储功能。 数据库和实例的区别 -------...
MySQL技术引擎内幕 Innodb存储引擎
读书笔记:mysql技术内幕innodb存储引擎学习
《MySQL技术内幕_InnoDB存储引擎_姜承尧_第2版》是一本深入探讨MySQL数据库中InnoDB存储引擎的专业书籍。作者姜承尧是数据库领域的知名专家,他的这部著作详细阐述了InnoDB引擎的核心概念、设计原理以及实际操作技巧...
### MySQL Innodb 引擎特性详解 #### 一、MySQL Innodb 引擎概述 MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它提供了多种存储引擎以满足不同场景的需求。其中,InnoDB是最常用的一种存储引擎之一,...
《MySQL技术内幕:InnoDB存储引擎》是国内目前唯一的一本关于InnoDB的著作,由资深MySQL专家亲自执笔,中外数据库专家联袂推荐,权威性毋庸置疑。内容深入,从源代码的角度深度解析了InnoDB的体系结构、实现原理、...
《MySQL内核:InnoDB存储引擎 卷1》是一本深度探讨MySQL数据库系统核心部分——InnoDB存储引擎的专业书籍。这本书以超高清的PDF格式呈现,包含详细的书签,便于读者快速定位和查阅相关内容。InnoDB作为MySQL中最常用...
《MySQL内核:InnoDB存储引擎 卷1》由资深MySQL专家,机工畅销图书作者亲自执笔,在以往出版的两本InnoDB介绍性图书的基础之上,更深入地介绍InnoDB存储引擎的内核,例如latch、B+树索引、事务、锁等,从源代码的...
本文详细介绍了mysql innodb引擎的原理、配置、调优、故障排除等
读书笔记:MySQL技术内幕(InnoDB存储引擎)个人编辑版
MySQL内核 INNODB存储引擎-卷1-高清-完整目录-2014年5月
MySQL_InnoDB技术内幕.pdf
本文详细介绍了MySQL InnoDB存储引擎中的索引原理及其实现方式,特别是B+树的应用。通过对比不同的树形结构,我们了解到B+树为何成为数据库索引的理想选择。此外,还讨论了InnoDB与MyISAM的主要差异,以及索引的插入...