概述
注意:随着mysql的更新,以下的以下结论可能会过时.下面的都是我从书中了解到的.请以最新的为准
mysql在软件设计上采用基于组件的模块化设计,C/C++开发
包含以下字系统(模块)和核心库
- 网络连接和网络通信协议库和子系统
- 线程,进程和内存分配子系统
- 查询解析和查询优化子系统
- 存储引擎接口子系统
- 存储引擎子系统
- 安全管理子系统
- 日志子系统
- 其他子系统,如主从负责,集群,错误处理等
- 底层核心API(mysys/string)
mysqlnd
mysql原生的驱动程序(MySQL Native Driver)
mysqlnd是通过Zend引擎访问数据库.mysqlnd使用zend引擎进行内存管理,因此它遵守php的内存限制设置,可分配更大的内存块,会尝试重用zval,并使用zval的缓存,节省CPU资源
存储引擎
MyISAM
优点
- 插入速度快
- 使用B tree索引
- 支持FUULTEXT全文索引
- count(*)的速度很快
- 磁盘空间占用较少
缺点:
- 不支持事务
- 不支持外键
- 表级别锁定
- 有持久性问题,表崩溃可能需要冗长的修复操作才能使其回复联机
MyISAM是在读频率相对高的环境,或高写入环境的最佳存储引擎,但不适合读写都很高的环境.DML语句会导致表锁定.
InnoDB
优点
- 支持事务
- 全ACID支持(原子性,一致性,隔离性,持久性)
- 支持MVCC,多版本并发控制
- 行级锁,并发写入同一表的不同行不会被序列化
- 支持外键
- 主键支持使用集群索引
- 提高了应用程序在高负载,大量连接下的并发能力
缺点
- InnoDB对磁盘空间的使用是MyISAM的3倍以上
- count(*)的速度大大降低
- 老版本没有全文索引(全文索引的支持是MySQL5.6新引入)
- 一些简单查询表单的速度低于MyISAM,但是负责的,多个表的查询速度则超过MyISAM
选择存储引擎
1.当应用程序执行的大部分都是读取操作时
MyISAM
2.当事务性和一致性非常重要时
InnoDB
3.当你又一个包含很多连接表的复杂模式时
InnoDB
4.当不见得操作非常重要
InnoDB(MyISAM没有防止数据崩溃的日志,版本控制和记录功能,并且几乎所有MyISAM备份解决方案都需要某种形式的停机时间)
mysql与内存
你给mysql的内存越多,性能越好,直到达到mysql的速度超过数据"工作集"的速度,达到这个速度之后,内存对mysql性能的影响就很小了
工作集
工作集:就是经常使用的数据集,你可能拥有一个15GB的数据库用于存放文章,当如果人们在你的搜索界面中最多只搜索两星期之内的文章,那么工作集就是发布日志小于14天的所有文章.一旦这个数据集可以轻松地放到内存中,性能的提高也基本上就到了极限,特别是当拥有一个好的索引集时
每活动连接(动态)使用的内存数量
per_connection_memory =
read_buffer_size //memory for sequential table scans
+read_rnd_buffer_size //memory fot buffering reads
+sort_buffer_size //memory for in mem sorts
+thread_stack //per connection memory
+join_buffer_size //memory for in mem table joins
每服务器(固定)使用的内存数量
per_server_memory =
tmp_table_size //memory for all temp tables
+max_heap_table_size //max size of single temp table
+key_buffer_size //memory allocated for index blocks
+innodb_buffer_pool_size //main cache for innodb data
+innodb_additional_mem_pool_size //Innodb record structure cache
+innodb_log_buffer_size //log file write buffer
+query_cache_size //compiled statement cache
MySQL可以使用的最大内存定义
max_memory = per_connection_memory * max_connections +per_server_memory
mysql加载配置文件
mysql会从以下的位置查找配置文件,从上到下的顺序加载.后面的文件中指令优先于前面文件的指令
参考
高性能PHP应用开发
最后
以上就是淡淡柜子为你收集整理的MYSQL框架和引擎mysql与内存参考的全部内容,希望文章能够帮你解决MYSQL框架和引擎mysql与内存参考所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复