什么是MySQL?

MySQL是一个开源的关系数据库管理系统(RDBMS),使用最常用的数据库管理语言——结构化查询语言(SQL)进行数据库管理。

MySQL是开源的,任何人都可以在通用公共许可证的许可下下载,并根据个人需求进行修改。

MySQL因其速度、可靠性和适应性而备受关注。大多数人认为MySQL是管理内容的最佳选择,不需要事务处理。

推荐教程:mysql入门视频教程

MySQL简介

MySQL是一个开源的关系数据库管理系统(RDBMS)。MySQL数据库系统使用最常用的数据库管理语言——结构化查询语言(SQL)进行数据库管理。

因为MySQL是开源的,任何人都可以在通用公共许可证的许可下下载,并根据个人需求进行修改。MySQL因其速度、可靠性和适应性而备受关注。大多数人认为MySQL是管理内容的最佳选择,不需要事务处理。

MySQL这个名字,由来不是很清楚。一个有影响的说法是,10多年来,基础指南和大量的库和工具都以“我的”为前缀,而且无论如何,MySQL AB的创始人之一Monty Widenius的女儿也取名为我的..这两者谁给了MySQL这个名字,至今仍是个谜,包括开发者。

MySQL的海豚logo的名字叫“sakila”,是MySQL AB的创始人在“海豚命名”比赛中从用户推荐的大量名字中挑选出来的。获奖名称由Ambrose Twebaze提供,他是一名来自非洲斯威士兰的开源软件开发人员。据安布罗斯介绍,Sakila来自一种叫做SiSwati的斯威士兰方言,这也是坦桑尼亚阿鲁沙的一个小镇的名字,靠近安布罗斯的家乡乌干达。

MySQL,虽然它的功能可能不是很强大,但是因为它的开源和传播广,很多人都知道这个数据库。它的历史也是传奇的。

数据库优化

选择InnoDB作为存储引擎。

大型产品的数据库要求高可靠性和高并发性。InnoDB作为默认的MySQL存储引擎,是比MyISAM更好的选择。

优化数据库结构

组织好数据库的模式、表和字段,以减少I/O的开销,相关项一起保存,提前规划,这样随着数据量的增长,性能也能保持较高的水平。

设计数据表应尽量减少其占用的空间,并且表的主键应尽可能短。对于InnoDB表,主键所在的列可以在每个辅助索引条目中复制,所以如果辅助索引很多,短主键可以节省很多空间。

仅创建提高查询性能所需的索引。索引有助于检索,但会增加插入和更新操作的执行时间。

改变InnoDB的缓冲特性

InnoDB提供了changebuffering的配置,可以减少维护二级索引所需的磁盘I/O。大型数据库可能会遇到大量的表操作和大量的I/O,以确保二级索引保持最新。当相关页面不在缓冲池中时,InnoDB的changebuffer会将缓存改为辅助索引条目,从而避免了无法立即从磁盘读取页面而导致的耗时I/O操作。当页面被加载到缓冲池中时,缓冲的更改将被合并,更新的页面稍后将被刷新到磁盘。这样做可以提高性能,适用于MySQL5.5及更高版本。

InnoDB页面压缩

InnoDB支持表的页面级压缩。在写数据页的时候,会有特定的压缩算法对其进行压缩。压缩后的数据将被写入磁盘,其打孔机制将释放页末的空块。如果压缩失败,数据将按原样写入。表和索引都将被压缩,因为索引通常占数据库总大小的很大一部分。压缩可以显著节省内存、I/O或处理时间,从而达到提高性能和可扩展性的目的。它还可以减少内存和磁盘之间传输的数据量。MySQL5.1及更高版本支持该功能。

请注意,页面压缩不支持表空间中的* * *表。* * * Enjoy表空间包括系统表空间、临时表空间和常规表空间。

使用批量数据导入

在主键上使用排序的数据源来导入批量数据可以加快数据插入的过程。否则,您可能需要在其他行之间插入行来维持排序,这将导致高磁盘I/O,从而影响性能并增加页面拆分。关闭自动提交模式也是有益的,因为它会在每次插入时对磁盘执行日志刷新。在大容量插入期间临时转移唯一键和外键检查也可以显著减少磁盘I/O。对于新创建的表,最佳做法是在大容量导入后创建外键/唯一键约束。

一旦您的数据达到稳定的大小,或者不断增长的表增加了几十或几百兆字节,您应该考虑使用OPTIMIZETABLE语句来重组表并压缩浪费的空间。扫描重组后的表将花费更少的I/O。

优化InnoDB磁盘I/O

增加InnoDB缓冲池大小允许从缓冲池而不是通过磁盘I/O访问查询。通过调整系统变量innodb_flush_method,可以调整清除缓冲区的索引以达到最佳水平。

MySQL的内存分配

在为MySQL分配足够的内存之前,请考虑MySQL在不同领域的内存需求。要考虑的关键领域是:并发连接——排序和临时表需要大量内存来容纳大量并发连接。在撰写本文时,16GB到32GB的RAM对于拥有3000多个并发连接的数据库来说已经足够了。

内存碎片会消耗大约10%或更多的内存。innodb_buffer_pool_size、key_buffer_size和query_cache_size等缓存和缓冲区会消耗大约80%的已分配内存。

日常保养

定期检查慢速查询日志并优化查询机制,以有效地使用缓存来减少磁盘I/O。优化它们以扫描最小数量的行,而不是扫描整个表。

其他可以帮助DBA检查和分析性能的日志还有:错误日志、通用查询日志、二进制日志、DDL日志(元数据日志)。

定期刷新缓存和缓冲区以减少碎片。使用OPTIMIZETABLE语句重新组织表并压缩任何可能浪费的空间。[1]