原标题:优化 MySQL:简单三个技巧

技巧#1:为临时表分配足够的内存

在某些情况下,服务器在处理语句时会创建内部临时表。临时表用于内部操作如GROUP BY和distinct,还有一些ORDER BY查询以及UNION和FROM子句(派生表)中的子查询。这些都是在内存中创建的内存表。内存中临时表的最大大小由tmp_table_size和max_heap_table_size中较小的值确定。如果临时表的大小超过这个阈值,则将其转换为磁盘上的InnoDB或MyISAM表。此外,如果查询涉及BLOB或TEXT列,而这些列不能存储在内存表中,临时表总是直接指向磁盘。

这种转换的代价很大,所以考虑增加max_heap_table_size和tmp_table_size变量的大小来帮助减少在磁盘上创建临时表的数量。请记住,这将需要大量内存,因为内存中临时表的大小是基于“最坏情况”的。例如,内存表总是使用固定长度的列,所以字符列使用VARCHAR(255)。这可以使内存中的临时表比想象的要大得多—事实上,这比查询表的总大小要大很多倍!当增加max_heap_table_size和tmp_table_sizevariables的大小时,一定要监视服务器的内存使用情况,因为内存中的临时表可能会增加达到服务器内存容量的风险。

一般来说,32M到64M是建议值,从这两个变量开始并根据需要进行调优。

在Monyog中的临时表监测

临时表的监测是许多预定义的Monyog监测之一。它提供了一些临时表使用的指标,包括:

允许的最大值:显示tmp_table_size服务器变量的值,它定义了在内存中创建的临时表的最大大小。与max_heap_table_size一起,这个值定义了可以在内存中创建的临时表的最大大小。如果内存临时表大于此大小,则将其存储在磁盘上。

内存表的最大大小:显示max_heap_table_size服务器变量的值,该值定义了显式创建的MEMORY存储引擎表的最大大小。

创建的临时表总数:显示created_tmp_tables服务器变量的值,它定义了在内存中创建的临时表的数量。

在磁盘上创建的临时表:显示created_tmp_disk_tables服务器变量的值,该变量定义了在磁盘上创建的临时表的数量。如果这个值很高,则应该考虑增加tmp_table_size和max_heap_table_size的值,以便增加创建内存临时表的数量,从而减少在磁盘上创建临时表的数量。

磁盘:总比率:基于created_tmp_disk_tables除以created_tmp_tables的计算值。由于tmp_table_size或max_heap_table_size不足而在磁盘上创建的临时表的百分比。Monyog将这个数字显示为一个进度条和百分比,以便快速确定有多少磁盘用于临时表,而不是内存。

趋势图可用于创建的总表,磁盘上创建的表和磁盘的总比值。这些让我们看到了它们随着时间的演变:

技巧#2:使用 InnoDB 存储引擎

如果你还在使用 MyISAM 存储引擎,那么是时候转换到 InnoDB 了。有很多的理由都表明 InnoDB 比 MyISAM 更有优势,如果你关注性能,那么,我们来看一下它们是如何利用物理内存的:

MyISAM:仅在内存中保存索引。

InnoDB:在内存中保存索引和数据。

结论:保存在内存的内容访问速度要比磁盘上的更快。

下面是如何在你的表上去转换存储引擎的命令:

ALTER TABLE table_name ENGINE=InnoDB;

注意:你已经创建了所有合适的索引,对吗?为了更好的性能,创建索引永远是第一优先考虑的事情。

技巧#3:其他相关的服务器变量

除了上述指标以外,还应该监控以下内容:

InnoDB缓冲池大小: InnoDB缓冲池大小在使用InnoDB的MySQL数据库中起着至关重要的作用。缓冲池同时缓存数据和索引。它的值应该尽可能的大,以确保数据库使用内存而不是硬盘驱动器进行读取操作。

临时表大小: MySQL使用max_heap_table_size和tmp_table_size中较小的一个来限制内存中临时表的大小。拥有较大的值可以帮助减少在磁盘上创建临时表的数量,但也会增加服务器内存容量的风险,因为这个指标适用于每个客户端。一般来说,32M到64M是建议的值,从这两个变量开始并根据需要进行调优。

InnoDB日志缓冲区大小: MySQL每次写入日志文件时,它都会利用可用于处理销售数据的重要系统资源。因此,将InnoDB日志缓冲区大小设置为较大值才有意义。这样,服务器在大型事务中写入磁盘的次数就减少了,从而最大限度地减少了这些耗时的操作。64M是这个变量的一个很好的起点。

责任编辑:

简易mysql优化_优化 MySQL:简单三个技巧相关推荐

  1. mysql 优化_常用MySQL优化

    1.大批量插入数据优化 (1)对于MyISAM存储引擎的表,可以使用:DISABLE KEYS 和 ENABLE KEYS 用来打开或者关闭 MyISAM 表非唯一索引的更新. ALTER TABLE ...

  2. 大于小于优化_以MySQL为例,详解数据库索引原理及深度优化

    本文内容主要来源于互联网上主流文章,只是按照个人理解稍作整合,后面附有参考链接. 一.摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引 ...

  3. 建立唯一索引后mysql策略_【MySQL】MySQL索引背后的之使用策略及优化【转】

    另外很不错的对于索引及索引优化的文章: 索引的使用 示例数据库 为了讨论索引策略,需要一个数据量不算小的数据库作为示例.本文选用MySQL官方文档中提供的示例数据库之一:employees.这个数据库 ...

  4. swoole mysql 连接数_用swoole简单实现MySQL连接池

    MySQL连接池 在传统的网站开发中,比如LNMP模式,由Nginx的master进程接收请求然后分给多个worker进程,每个worker进程再链接php-fpm的master进程,php-fpm再 ...

  5. mysql 优先队列_深入浅出 MySQL 优先队列(你一定会踩到的order by limit 问题)

    英语和算法是程序员的两条腿 本文适用于 MySQL 5.6 及以上版本 0.先抛问题 假设字段category无索引且有重复值,order by category 和limit组合使用的结果会和预期不 ...

  6. mysql 递归_「MySQL」 - SQL Cheat Sheet - 未完成

    近几个月的心情真是安排的妥妥的,呈现W状.多的不说了,这里对SQL的测试进行简单梳理,制作一份SQL Cheat Sheet. 0x01.数据库基本架构 Clinet层 Server层 连接器 网络连 ...

  7. mysql 军规_关于MySql的军规

    一.基础规范 表存储引擎必须使用InnoDB 表字符集默认使用utf8,必要时候使用utf8mb4 解读: 通用,无乱码风险,汉字3字节,英文1字节 utf8mb4是utf8的超集,有存储4字节例如表 ...

  8. mysql整备_【mysql】使用xtrabackup在线增量备份及恢复数据库

    一.Percona Xtrabackup 简介 1.Xtrabackup  bin目录文件 介绍 1)innobackupex innobackupex 是xtrabackup的一个符号链接 . in ...

  9. mysql数据库维护_维护MySQL数据库表

    在本教程中,我们将向您介绍一些非常有用的语句,使您可以在MySQL中维护数据库表. MySQL提供了几个有用的语句,可以有效地维护数据库表. 这些语句使您能够分析,优化,检查和修复数据库表. 分析表语 ...

最新文章

  1. 转 linux常用查看硬件设备信息命令
  2. Intel GPU及NVIDIA GPU对视频编解码支持情况
  3. 设计模式--建造者(Builder)模式
  4. c4d打开没反应_掌握这3种C4D技巧,线框渲染效果图也就几秒的事
  5. php输出PDF的文件流_怎么用PHP在HTML中生成PDF文件
  6. java解析xml中文字符乱码_各种Java中文乱码的处理方法
  7. AC日记——简单密码 openjudge 1.7 10
  8. linux 空硬盘,linux – dd在整个磁盘上,但不想要空的部分
  9. Document API
  10. dueros基于什么开发的_干货丨超详细!DuerOS开发套件申请攻略!
  11. easyui下拉选项多怎么解决_作物根部病害多原因在哪?解决病害生根措施怎么做?...
  12. koa2 mysql sequelize_使用nodejs-koa2-mysql-sequelize-jwt 实现项目api接口
  13. Codeforces Round #629 (Div. 3) A~C
  14. 自然语言处理入门(4)——中文分词原理及分词工具介绍
  15. 怎么关闭计算机管理窗口,桌面窗口管理器已停止工作并应关闭这应该怎么解决啊...
  16. 计算机相关扩展活动战队名字,有诗意的战队名字大全
  17. WPS文字无法创建对象,请确认对象已在系统注册表注册的问题
  18. 【吐血整理】那些让你起飞的计算机基础知识:学什么,怎么学?
  19. 卷积神经网络group群卷积以及group lasso
  20. 难忘2017年5月20日的那次雪崩

热门文章

  1. python使用MySQL数据库
  2. 【uni-app】深度作用选择器解决修改checkbox样式无效问题
  3. Spring boot的Spring MVC自动配置原理
  4. 返回值类型有哪些_关于类型的思考
  5. StringBuider 的效率一定高吗?要看你怎么使用
  6. 并发基础(七):Thread 类的sleep()、yeild()、join()
  7. javaGUI猜生日游戏
  8. 数据库索引的作用和优点缺点以及索引的11中用法
  9. 数据结构与算法——并查集(不相交集合)
  10. 使用SAX解析XML文件