首页  >  文章  >  数据库  >  MySQL数据库打开文件数的实际操作流程

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

WBOY
WBOY原创
2016-06-07 16:14:181396浏览

以下的文章主要描述的是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数据库如何计算打开文件数的介绍,望你能有所收获。


声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn