MySQL 系统会在内存(MEMORY)和磁盘(MyISAM)中建立临时表,如何能知道在磁盘中建立了多少临时表以及在内存中建立多少临时表呢?你可以通过下面命令获知:

1
2
3
4
5
6
7
mysql> SHOW GLOBAL STATUS LIKE 'Created_tmp%tables';
+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Created_tmp_disk_tables | 49094    |
| Created_tmp_tables      | 37842181 |
+-------------------------+----------+

很显然,在内存中的临时表的性能要比在磁盘中好得多得多,因此我们希望尽可能的在内存中建立临时表。

为了实现这个要求,我们先检查下临时表的配置大小:

1
2
3
4
5
6
7
mysql> SHOW GLOBAL VARIABLES LIKE '%table_size';
+---------------------+----------+
| Variable_name       | Value    |
+---------------------+----------+
| max_heap_table_size | 25165824 |
| tmp_table_size      | 25165824 |
+---------------------+----------+

如果临时表的大小比上述值小,则放于内存中的 MEMORY 表;如果比上述值大则存放于磁盘中的 MyISAM 表。

但还有一个其他的因素会导致存放到磁盘的 MyISAM 表,那就是 MEMORY 表不能处理 TEXT 和 BLOG 类型数据。这种情况下 MySQL 会直接写入磁盘中的 MyISAM,并算作是 Created_tmp_disk_tables 的值。

如果临时表已经开始导致严重的 I/O 性能问题,那么你就要考虑使用磁盘内存映射来代替物理磁盘。

在 Linux 上我们有两种方法在内存中建立 RAM-Disk,分别是 ramfs 和 tmpfs。

这里我们推荐使用 tmpfs。

可通过如下命令来创建 RAM-disk:

1
2
3
shell> mkdir -p /mnt/ramdisk
shell> chown mysql:mysql /mnt/ramdisk
shell> mount -t tmpfs -o size=512M tmpfs /mnt/ramdisk

为了在系统下次启动时自动创建,我们可以将下列脚本置于 /etc/fstab 文件中:

1
tmpfs           /mnt/ramdisk     tmpfs   rw,mode=1777    0       0

MySQL 还是将数据写到默认的磁盘,可通过下面命令来检查:

1
2
3
4
5
6
mysql> SHOW GLOBAL VARIABLES LIKE 'tmpdir';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| tmpdir        | /tmp  |
+---------------+-------+

你可以修复 my.cnf 文件来改变这个路径,然后重启数据库。

英文原文OSCHINA原创翻译

http://www.oschina.net/question/12_79459

在stackoverflow上看到过类似的问题

http://stackoverflow.com/questions/7532307/skip-copying-to-tmp-table-on-disk-mysql

在内存中建立 MySQL 的临时目录(转)的更多相关文章

  1. Spark(Python) 从内存中建立 RDD 的例子

    Spark(Python) 从内存中建立 RDD 的例子: myData = ["Alice","Carlos","Frank"," ...

  2. 在Ubuntu中建立MySQL数据库

    最近在做一个关于云计算安全系统的项目,需要用到MySQL数据库,现在把建立数据库的步骤记录下来. 一.用命令在Ubuntu上安装MySQL # sudo apt-get update # sudo a ...

  3. 工程中建立多个src目录

    android 工程下可以有多个源代码的目录,不一定都要放到src下面.可以在 .classpath 文件中添加. 默认是这样的: <classpath> <classpathent ...

  4. Java 类中各成分加载顺序 和 内存中的存放位置

    参加一个笔试,有一个关于类的静态代码块.构造代码块.构造函数的执行顺序的问题.不太清楚,网上百度了一下.在这里记录一下. 一.什么时候会加载类?使用到类中的内容时加载:有三种情况1.创建对象:new ...

  5. Linux 下V4l2摄像头采集图片,实现yuyv转RGB,RGB转BMP,RGB伸缩,jpeglib 库实现压缩RGB到内存中,JPEG经UDP发送功(转)

    ./configure CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-ld --host=arm-linux --prefix=/usr/loca ...

  6. 如何在VS和CB中配置MySQL环境

    这里,由于我的MySQL安装在D盘 MY SQL\MySQL Server 5.6该路径下,所以后面的路径均以D:\MY SQL\MySQL Server 5.6开头 在VS中配置MySQL环境 包含 ...

  7. 6、pytest -- 临时目录和文件

    目录 1. 相关的fixture 1.1. tmp_path 1.2. tmp_path_factory 1.3. tmpdir 1.4. tmpdir_factory 1.5. 区别 2. 默认的基 ...

  8. IIS7程序发布后 之 报图表处理程序配置 [c:\TempImageFiles\] 中的临时目录无效

    把.net4.0的ASP.NET网站布置在IIS7上,原本开发时一切ok,图形都能够出来,但是一旦部署到iis上,再访问的话, 错误问题:图表处理程序配置 [c:\TempImageFiles\] 中 ...

  9. QTemporaryDir及QTemporaryFile建立临时目录及文件夹

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QTemporaryDir及QTemporaryFile建立临时目录及文件夹     本文地址 ...

随机推荐

  1. 共同发展一个以上的开发者账户多台电脑 证书 p12 型材 进出口

    1:导出相应的开发人员证书的配置文件. 2:依据相应的app id 创建配置文件. 3:打开钥匙串,把你的公布证书导出p12文件. 4:用开发人员账号导出developerprofile文件. 5:把 ...

  2. pcie inbound、outbound及EP、RC间的互相訪问

    Inbound:PCI域訪问存储器域 Outbound:存储器域訪问PCI域 RC訪问EP: RC存储器域->outbound->RC PCI域->EP PCI域->inbou ...

  3. HttpClient4的使用,模拟浏览器登陆新浪微博,发表微博和文字+图片微博

    HttpClient4,最原始的需求就是使用其来模拟浏览器想服务器发起http请求,当然,他的功能不止于此,但是我需要的就是这个功能而已,jdk也有其自带的类似的api:UrlConnection,效 ...

  4. 使用Maven管理Spring

    原文链接: Spring with Maven原文日期: 2013年04月17日翻译日期: 2014年06月29日翻译人员: 铁锚 1. 概述本教程向您展示怎样通过 Maven 管理 Spring 的 ...

  5. Wooden Sticks(杭州电1051)

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  6. MD5加密,解密

    using System; using System.Collections.Generic; using System.Text; using System.Globalization; using ...

  7. 飘逸的python - 发送带各种类型附件的邮件

    上一篇博文演示了如何发送简单的邮件,这一篇将演示如何发送各种类型的附件. 基本思路就是,使用MIMEMultipart来标示这个邮件是多个部分组成的,然后attach各个部分.如果是附件,则add_h ...

  8. Qt学习一门:直接使用QT具

    今天,通过直接使用QT一些工具来编写命令行程序.你可以看到一种Qt更一般的用法. 内容很easy,输出电流日期. 首先,用一个QDate分类,可以使用QDate类的静态方法currentDate为了得 ...

  9. 【安德鲁斯】基于脚本的数据库&quot;增量更新&quot;,如果不改变,每次更新java代码、!

    思维: 1.当然,它是基于SQLiteOpenHelper.onCreate(第一个呼叫建立).onUpdate(当所谓的升级计划) 2.用"脚本"(脚本制作详细方法问度娘)做数据 ...

  10. VMware vSphere 服务器虚拟化之十八桌面虚拟化之安装View Composer服务器

                        VMware vSphere 服务器虚拟化之十八桌面虚拟化之安装View Composer服务器      View Compose服务可安装在管理虚拟机的vC ...