我是靠谱客的博主 淡淡柜子,最近开发中收集的这篇文章主要介绍MYSQL框架和引擎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应用开发

最后

以上就是淡淡柜子为你收集整理的MYSQL框架和引擎mysql与内存参考的全部内容,希望文章能够帮你解决MYSQL框架和引擎mysql与内存参考所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部