将MySQL的临时目录建立在内存中的教程

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

mysql> SHOW GLOBAL STATUS LIKE 'Created_tmp%tables';
+-------------------------+----------+
| Variable_name      | Value  |
+-------------------------+----------+
| Created_tmp_disk_tables | 49094  |
| Created_tmp_tables   | 37842181 |
+-------------------------+----------+

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

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

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:

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

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

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

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

mysql> SHOW GLOBAL VARIABLES LIKE 'tmpdir';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| tmpdir    | /tmp |
+---------------+-------+

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

(0)

相关推荐

  • MySQL中对于not in和minus使用的优化

    优化前: select count(t.id) from test t where t.status = 1 and t.id not in (select distinct a.app_id from test2 a where a.type = 1 and a.rule_id in (152, 153, 154)) 17:20:57 laojiu>@plan PLAN_TABLE_OUTPUT ----------------------------------------- Plan ha

  • php简单操作mysql数据库的类

    本文实例讲述了php简单操作mysql数据库的类.分享给大家供大家参考.具体如下: <?php /** * Database class * * @version: 2.2 * @revised: 27 may 2007 * **/ class Database { var $host; var $name; var $user; var $pass; var $prefix; var $linkId; function Database($mysql) { foreach($mysql as

  • PHP使用mysqldump命令导出数据库

    PHP使用外部命令导出数据库,代码很简单,就不多废话了 <?php // $dumpFileName目录要有可写权限 $DbHost = 'localhost'; $DbUser = 'root'; $DbPwd = '123456'; $DbName = 'a'; $fileName = $DbName . '_MySQL_data_backup_' . date('YmdHis) . '.sql'; $dumpFileName= "/var/$fileName"; heade

  • 将MySQL的临时目录建立在内存中的教程

    MySQL 系统会在内存(MEMORY)和磁盘(MyISAM)中建立临时表,如何能知道在磁盘中建立了多少临时表以及在内存中建立多少临时表呢?你可以通过下面命令获知: mysql> SHOW GLOBAL STATUS LIKE 'Created_tmp%tables'; +-------------------------+----------+ | Variable_name | Value | +-------------------------+----------+ | Created_

  • Python tempfile模块生成临时文件和临时目录

    tempfile 模块专门用于创建临时文件和临时目录,它既可以在 UNIX 平台上运行良好,也可以在 Windows 平台上运行良好. tempfile 模块中常用的函数,如表 1 所示. 表 1 tempfile 模块常用函数及功能 tempfile 模块函数 功能描述 tempfile.TemporaryFile(mode='w+b', buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=Non

  • ASP.NET拒绝访问临时目录的解决方法

    今天把博客程序部署到一台阿里云Windows主机上,通过浏览器访问时出现下面的错误: 复制代码 代码如下: 创建 BlogConfigurationSettings 的配置节处理程序时出错: 拒绝访问临时目录.以其运行 XmlSerializer 的身份"IIS APPPOOL\www.cnblogs.com"没有足够的权限访问临时目录.CodeDom 将使用此进程用于进行编译的用户帐户,因此如果用户对系统临时目录没有访问权限,则将无法编译.使用 Path.GetTempPath()

  • 在服务端进行目录建立、删除,文件上传、删除的过程的php代码

    <?php extract($_POST); extract($_GET); ?> <html> <head> <title>查看服务器端目录和文件</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body bgcolor="#FFFFFF&qu

  • struts2获取服务器临时目录的方法

    struts2获取服务器(tomcat.WebLogic)的临时目录,供大家参考,具体内容如下 需要导入: import java.io.File; import org.apache.struts2.ServletActionContext; 方法封装 // 指定服务器的用于临时存储的目录 public static final String TEMP_DIR_CONTEXT_ATTRIBUTE = "javax.servlet.context.tempdir"; /** * 获取临

  • Python实现获取系统临时目录及临时文件的方法示例

    本文实例讲述了Python实现获取系统临时目录及临时文件的方法.分享给大家供大家参考,具体如下: 在开发应用程序的过程中,会有一些临时的信息,或者不太重要的信息,会保存在一个特殊的目录下面,在windows 里面,通常会在 c:\docume~1\admini~1\locals~1\temp 这个地方,而在 centos 中就是 /tmp 目录 比如我们经常上网,网页的的一些临时信息都保存在这个临时目录里面.那么在我们自己写应用程序的时候,怎么得到这个临时目录,怎么创建临时文件呢.在python

  • 浅谈Mysql哪些字段适合建立索引

    1 数据库建立索引常用的规则如下: 1.表的主键.外键必须有索引: 2.数据量超过300的表应该有索引: 3.经常与其他表进行连接的表,在连接字段上应该建立索引: 4.经常出现在Where子句中的字段,特别是大表的字段,应该建立索引: 5.索引应该建在选择性高的字段上: 6.索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引: 7.复合索引的建立需要进行仔细分析:尽量考虑用单字段索引代替: A.正确选择复合索引中的主列字段,一般是选择性较好的字段: B .复合索引的几个字段是否经常同

  • 解决SpringBoot文件上传临时目录找不到的问题

    SpringBoot文件上传临时目录问题 我相信大家在把项目部署到服务器上面时候都会遇到这样一个问题: org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request;nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.133776721859504205

  • pytest内置fixture使用临时目录流程详解

    目录 前言 tmpdir tmpdir_factory tmp_path tmp_path_factory 指定临时目录 前言 本篇来学习pytest中内置fixture中临时目录的使用 tmpdir tmpdir作用范围是函数级别,创建临时文件供单个测试点调用 # -*- coding: utf-8 -*- import os def test_tmpdir(tmpdir): """内置tmpdir fixture使用""" # 创建临时文件

  • MySQL操作数据库和表的常用命令新手教程

    我是新手 学习如何管理和导航MySQL数据库和表是要掌握的首要任务之一,下面的内容将主要对MySQL的数据库和表的一些常用命令进行总结,一些我们不得不掌握的命令,一些信手拈来的命令. 处理数据库 1.查看数据库 获取服务器上的数据库列表通常很有用.执行show databases;命令就可以搞定. 复制代码 代码如下: mysql> show databases; 2.创建数据库 复制代码 代码如下: mysql> create database db_test; Query OK, 1 ro

随机推荐