程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL數據庫打開文件數的實際操作流程

MySQL數據庫打開文件數的實際操作流程

編輯:MySQL綜合教程

以下的文章主要描述的是MySQL數據庫是如何正確計算打開文件數的實際操作流程,大家都知道每打開一個MyISAM表,就需要對其使用2個文件描述符,所以我們就來驗證一下MySQL數據庫如何計算打開文件數。

試驗

從手冊的"6.4.8. How MySQL Opens and Closes Tables"可以了解到,每打開一個MyISAM表,就需要使用2個文件描述符,咱們來驗證一下。

1. 重啟mysqld

  1. /etc/init.d/mysql restart 

2. 看看打開了幾個文件

  1. lsof | grep /home/mysql   
  2. ...   
  3. mysqld 24349 mysql 5u unix 0x000001041e8de040 4244009 /home/mysql/mysql.sock   
  4. mysqld 24349 mysql 6u REG 8,33 2048 30425188 /home/mysql/mysql/host.MYI   
  5. mysqld 24349 mysql 7u REG 8,33 0 30425189 /home/mysql/mysql/host.MYD   
  6. mysqld 24349 mysql 8u REG 8,33 2048 30425153 /home/mysql/mysql/user.MYI   
  7. mysqld 24349 mysql 9u REG 8,33 892 30425155 /home/mysql/mysql/user.MYD   
  8. mysqld 24349 mysql 10u REG 8,33 5120 30425126 /home/mysql/mysql/db.MYI   
  9. mysqld 24349 mysql 11u REG 8,33 3080 30425148 /home/mysql/mysql/db.MYD   
  10. mysqld 24349 mysql 12u REG 8,33 4096 30425154 /home/mysql/mysql/tables_priv.MYI   
  11. mysqld 24349 mysql 13u REG 8,33 0 30425157 /home/mysql/mysql/tables_priv.MYD   
  12. mysqld 24349 mysql 14u REG 8,33 4096 30425143 /home/mysql/mysql/columns_priv.MYI   
  13. mysqld 24349 mysql 15u REG 8,33 0 30425156 /home/mysql/mysql/columns_priv.MYD   
  14. mysqld 24349 mysql 16u REG 8,33 4096 30425127 /home/mysql/mysql/procs_priv.MYI   
  15. mysqld 24349 mysql 17u REG 8,33 0 30425136 /home/mysql/mysql/procs_priv.MYD   
  16. mysqld 24349 mysql 18u REG 8,33 1024 30425173 /home/mysql/mysql/servers.MYI   
  17. mysqld 24349 mysql 19u REG 8,33 0 30425174 /home/mysql/mysql/servers.MYD   
  18. mysqld 24349 mysql 20u REG 8,33 2048 30425182 /home/mysql/mysql/event.MYI   
  19. mysqld 24349 mysql 21u REG 8,33 0 30425183 /home/mysql/mysql/event.MYD   
  20. ...  

可以看到,總共打開了8個表,每個表分別有2個MySQL數據庫文件描述符,看來沒錯。

3. 再來看 status 結果

  1. mysql>show global status like 'open_%';   
  2. +------------------------+-------+   
  3. | Variable_name | Value |   
  4. +------------------------+-------+   
  5. | Open_files | 17 |   
  6. | Open_streams | 0 |   
  7. | Open_table_definitions | 15 |   
  8. | Open_tables | 8 |   
  9. | Opened_files | 52 |   
  10. | Opened_tables | 15 |   
  11. +------------------------+-------+  

4. flush tables 後再看看

  1. mysql>flush tables;   
  2. mysql> show global status like 'open_%';   
  3. +------------------------+-------+   
  4. | Variable_name | Value |   
  5. +------------------------+-------+   
  6. | Open_files | 1 |   
  7. | Open_streams | 0 |   
  8. | Open_table_definitions | 0 |   
  9. | Open_tables | 0 |   
  10. | Opened_files | 52 |   
  11. | Opened_tables | 15 |   
  12. +------------------------+-------+   
  13. lsof | grep /home/mysql   
  14. ...   
  15. mysqld 24349 mysql 5u unix 0x000001041e8de040 4244009 /home/mysql/mysql.sock   
  16. mysqld 24349 mysql 22u unix 0x00000102378ff980 4244128 /home/mysql/mysql.sock   
  17. ...  

可以看到,flush 之後,所有的文件描述符都釋放了。

通過測試可以得知,另一個打開的文件描述符是 slow query log所用。

如果是有大量的 MyISAM 表,那麼就需要特別注意打開文件數是否會超出限制了。

以上的相關內容就是對MySQL數據庫如何計算打開文件數的介紹,望你能有所收獲。

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