Home  >  Article  >  Database  >  MySQL数据库打开文件数的实际操作流程

MySQL数据库打开文件数的实际操作流程

WBOY
WBOYOriginal
2016-06-07 16:14:181396browse

以下的文章主要描述的是MySQL数据库是如何正确计算打开文件数的实际操作流程,大家都知道每打开一个MyISAM表,就需要对其使用2个文件描述符,所以我们就来验证一下MySQL数据库如何计算打开文件数。 试验 从手册的6.4.8. How MySQL Opens and Closes Tables可

以下的文章主要描述的是MySQL数据库是如何正确计算打开文件数的实际操作流程,大家都知道每打开一个MyISAM表,就需要对其使用2个文件描述符,所以我们就来验证一下MySQL数据库如何计算打开文件数。

试验

从手册的"6.4.8. How MySQL Opens and Closes Tables"可以了解到,每打开一个MyISAM表,就需要使用2个文件描述符,咱们来验证一下。

1. 重启mysqld

<ol class="dp-xml"><li class="alt"><span><span>/etc/init.d/mysql restart </span></span></li></ol>

2. 看看打开了几个文件

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

可以看到,总共打开了8个表,每个表分别有2个MySQL数据库文件描述符,看来没错。

3. 再来看 status 结果

<ol class="dp-xml">
<li class="alt"><span><span>mysql</span><span class="tag">></span><span>show global status like 'open_%';   </span></span></li>
<li><span>+------------------------+-------+   </span></li>
<li class="alt"><span>| Variable_name | Value |   </span></li>
<li><span>+------------------------+-------+   </span></li>
<li class="alt"><span>| Open_files | 17 |   </span></li>
<li><span>| Open_streams | 0 |   </span></li>
<li class="alt"><span>| Open_table_definitions | 15 |   </span></li>
<li><span>| Open_tables | 8 |   </span></li>
<li class="alt"><span>| Opened_files | 52 |   </span></li>
<li><span>| Opened_tables | 15 |   </span></li>
<li class="alt"><span>+------------------------+-------+  </span></li>
</ol>

4. flush tables 后再看看

<ol class="dp-xml">
<li class="alt"><span><span>mysql</span><span class="tag">></span><span>flush tables;   </span></span></li>
<li>
<span>mysql</span><span class="tag">></span><span> show global status like 'open_%';   </span>
</li>
<li class="alt"><span>+------------------------+-------+   </span></li>
<li><span>| Variable_name | Value |   </span></li>
<li class="alt"><span>+------------------------+-------+   </span></li>
<li><span>| Open_files | 1 |   </span></li>
<li class="alt"><span>| Open_streams | 0 |   </span></li>
<li><span>| Open_table_definitions | 0 |   </span></li>
<li class="alt"><span>| Open_tables | 0 |   </span></li>
<li><span>| Opened_files | 52 |   </span></li>
<li class="alt"><span>| Opened_tables | 15 |   </span></li>
<li><span>+------------------------+-------+   </span></li>
<li class="alt"><span>lsof | grep /home/mysql   </span></li>
<li><span>...   </span></li>
<li class="alt"><span>mysqld 24349 mysql 5u unix 0x000001041e8de040 4244009 /home/mysql/mysql.sock   </span></li>
<li><span>mysqld 24349 mysql 22u unix 0x00000102378ff980 4244128 /home/mysql/mysql.sock   </span></li>
<li class="alt"><span>...  </span></li>
</ol>

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

通过测试可以得知,另一个打开的文件描述符是 slow query log所用。

如果是有大量的 MyISAM 表,那么就需要特别注意打开文件数是否会超出限制了。

以上的相关内容就是对MySQL数据库如何计算打开文件数的介绍,望你能有所收获。


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn