程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 將MySQL的臨時目錄建立在內存中的教程,mysql目錄建立教程

將MySQL的臨時目錄建立在內存中的教程,mysql目錄建立教程

編輯:MySQL綜合教程

將MySQL的臨時目錄建立在內存中的教程,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 文件來改變這個路徑,然後重啟數據庫。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved