`

mysql innodb 引擎内幕读书笔记2

阅读更多
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
    
分享到:
评论

相关推荐

    MySQL技术内幕InnoDB存储引擎-读书笔记.pdf

    MySQL技术内幕InnoDB存储引擎-读书笔记.pdf

    Mysql 的InnoDB引擎相关读书笔记

    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存储引擎.pdf

    最近在学习MySQL技术内幕 InnoDB存储引擎 第2版,整理了一些文档分享出来,同时也方便以后查看。若有不当之处,烦请批评指正。 1. MySQL体系结构和存储引擎 2. InnoDB存储引擎 2.1 InnoDB体系结构 2.2 ...

    读书笔记:《高性能MySQL》《MySQL技术内幕InnoDB存储引擎》阅读笔记.zip

    读书笔记:《高性能MySQL》《MySQL技术内幕InnoDB存储引擎》阅读笔记

    MySQL技术内幕 InnoDB存储引擎.pptx

    与前一版相比,第2版不仅针对最新的MySQL 6对相关内容进行了全面的补充,还根据广大读者的反馈意见对第1版中存在的不足进行了完善,《MySQL技术内幕:InnoDB存储引擎》大约重写了50%的内容。 《MySQL技术内幕:...

    MySQL innodb 技术内幕

    MySQL InnoDB 技术内幕 MySQL InnoDB 存储引擎是 MySQL 关系数据库管理系统中最常用的存储引擎之一。InnoDB 存储引擎是 MySQL 的默认存储引擎,它提供了高性能、高可靠性的存储功能。 数据库和实例的区别 -------...

    读书笔记:mysql技术内幕innodb存储引擎学习.zip

    读书笔记:mysql技术内幕innodb存储引擎学习

    MySql Innodb 引擎特性详解

    ### MySQL Innodb 引擎特性详解 #### 一、MySQL Innodb 引擎概述 MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它提供了多种存储引擎以满足不同场景的需求。其中,InnoDB是最常用的一种存储引擎之一,...

    mysql内核 innodb存储引擎

    《MySQL技术内幕:InnoDB存储引擎》是国内目前唯一的一本关于InnoDB的著作,由资深MySQL专家亲自执笔,中外数据库专家联袂推荐,权威性毋庸置疑。内容深入,从源代码的角度深度解析了InnoDB的体系结构、实现原理、...

    MySQL内核:InnoDB存储引擎 卷1.pdf.zip

    《MySQL内核:InnoDB存储引擎 卷1》是一本深度探讨MySQL数据库系统核心部分——InnoDB存储引擎的专业书籍。这本书以超高清的PDF格式呈现,包含详细的书签,便于读者快速定位和查阅相关内容。InnoDB作为MySQL中最常用...

    MySQL技术InnoDB存储引擎_姜承尧_第2版

    《MySQL技术内幕_InnoDB存储引擎_姜承尧_第2版》是一本深入探讨MySQL数据库中InnoDB存储引擎的专业书籍。作者姜承尧是数据库领域的知名专家,他的这部著作详细阐述了InnoDB引擎的核心概念、设计原理以及实际操作技巧...

    MySQL内核:InnoDB存储引擎 卷1.pdf

    《MySQL内核:InnoDB存储引擎 卷1》由资深MySQL专家,机工畅销图书作者亲自执笔,在以往出版的两本InnoDB介绍性图书的基础之上,更深入地介绍InnoDB存储引擎的内核,例如latch、B+树索引、事务、锁等,从源代码的...

    Mysql-INNODB存储引擎详解

    本文详细介绍了mysql innodb引擎的原理、配置、调优、故障排除等

    读书笔记:MySQL技术内幕(InnoDB存储引擎)个人编辑版.zip

    读书笔记:MySQL技术内幕(InnoDB存储引擎)个人编辑版

    MySQL内核 INNODB存储引擎-卷1-高清-完整目录-2014年5月

    MySQL内核 INNODB存储引擎-卷1-高清-完整目录-2014年5月

    MySQL Innodb 索引原理详解

    本文详细介绍了MySQL InnoDB存储引擎中的索引原理及其实现方式,特别是B+树的应用。通过对比不同的树形结构,我们了解到B+树为何成为数据库索引的理想选择。此外,还讨论了InnoDB与MyISAM的主要差异,以及索引的插入...

    MySql innodb 引擎表存储分析

    ### MySQL Innodb 存储引擎表存储分析 #### 概述 MySQL的InnoDB存储引擎是一种广泛使用的事务处理引擎,支持行级锁定和外键约束等功能。本文将深入解析InnoDB存储引擎中的表存储机制,重点介绍其如何管理和存储数据...

Global site tag (gtag.js) - Google Analytics