mysql内存与数据结构.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
mysql内存与数据结构

* * * * * * * * * * * * * * * * Mysql内存与数据结构 赵孝国 2012/08/05 QQ:106708376 Blog:blog.csdn.net/wyzxg Mysql内存与数据结构 1.Mysql如何完成一个session 2.mysql内存结构 3.mysql数据结构 4.mysql架构设想 Mysql全貌 Mysql如何完成一个session 1.Mysql如何完成一个session 一个会话流程: mysql服务器监听3306端口 验证用户 创建线程解析sql 查询优化 打开表 检查buffer是否有对应的缓存记录 到磁盘寻找数据 写入到缓存 返回数据给客户端 关闭表 关闭线程 关闭连接 Mysql如何生成执行计划的? innodb的统计信息其实是一个不太准确的评估值,评估样本的数量默认上取8个页块的样本数据。这个数量可以通过选项innodb_stats_sample_pages来配置。 收集主要统计信息: (1) rec_per_key //每一个key,包含多少记录。在存储引擎 (2) records_in_table //当前表上,有多少记录。在存储引擎 (3) rec_in_range //当前表上,在指定范围上有多少记录 mysql控制优化器行为的两个变量 optimizer_prune_level:让优化器根据每个表访问的行数来跳过某些方案,这样可以大大的减少编译次数 optimizer_search_depth:让优化器知道对于每一个可能的查询计划,应该查看多深,其值如设置过大,那么join时,获取最优执行计划的代价十分巨大 何时更新统计信息 1.analyze table 2.第一次open table Mysql如何生成执行计划的? 还有在访问如下统计信息表时,也会更新统计信息 information_schema.TABLES information_schema.STATISTICS information_schema.PARTITIONS information_schema.KEY_COLUMN_USAGE information_schema.TABLE_CONSTRAINTS information_schema.REFERENTIAL_CONSTRAINTS show table status like ‘%tablename%’ 也会触发更新统计信息的操作 可以通过参数innodb_stats_on_metadata关闭动态触发统计更新 Mysql内存与数据结构 1.Mysql如何完成一个session 2.mysql内存结构 3.mysql数据结构 4.mysql架构设想 Mysql内存结构 Mysql进程结构 Mysql不像oracle那样是通过多进程来完成其功能的。默认情况下,InnoDB存储引擎的后台线程有7个: 4个IO thread, 1个master thread, 1个锁(lock)监控线程, 1个错误监控线程; 在InnoDB Plugin版本开始增加了默认IO thread的数量,默认的read thread和write thread分别增大到了4个,并且不再使用innodb_file_ io_threads参数,而是分别使用innodb_read_io_threads和innodb_write_io_threads参数。 mysql show variables like innodb_%_io_threads; +++ | Variable_name | Value | +++ | innodb_read_io_threads | 4 | | innodb_write_io_threads | 4 | +++ 2 rows in set (0.41 sec) Mysql进程结构 mysql show variables like innodb_version; +++ | Variable_name | Value | +++ | innodb_version | 1.1.8 | +++ 1 row in set (0.00 sec) 后台线程主要作用有三个: 1. 刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据 2. 将修改的数据文件刷新到磁盘文件 3. 在数据库发生异常情况下,保证InnoDB能恢复到正常运行状态 master thread的线程优先级别最高。其内部由几个循环(loop)组成:主循环(loop)、后台循环(background loop)、刷新循环(flush loop)、暂停循环(suspend loop)。

文档评论(0)

ctuorn0371 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档