MYSQL框架和引擎

注意:随着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应用开发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值