文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>MySQL如何打开关闭表

MySQL如何打开关闭表

时间:2007-10-18  来源:sss0213

     当我们运行一个 mysqladmin -u root -p status命令的时候,有可能会看到下面的信息:      Uptime: 4836  Threads: 1  Questions: 178  Slow queries: 0  Opens: 169  Flush tales: 1  Open tables: 51  Queries per second avg: 0.037
     如果我们只有6张表,那么这个Open tables的数值为12是不是很奇怪哦?
     MySQL是多线程的,因此有可能有很多用户对于给定的表同步发布查询请求,要使由于不同状态的多线程带来的问题降至最低(这些线程操作同一个表),这个表就要被每一个并发的线程独立打开。这样做会使用额外的一些内存资源,但是通常会提高性能。对于MyISAM表,有一个额外的文件描述器用于每个客户(这些客户打开的文件)的数据文件,与此相对应,索引文件描述器是所有线程共享使用的。     table_cache、max_connections、max_tmp_tables系统变量影响服务器保持打开状态的文件的最大数目。如果我们增大这其中的一个或几个数值,有可能会抬高操作系统为每一个打开文件描述器的线程数量设置的限制条件。许多操作系统允许我们提高打开文件的限制条件,但是采用的方式各不相同,因此要仔细阅读所使用的操作系统文件来决定是否能够提高这个限制条件以及如何实现。     table_cache与max_connections有关。比如说,200个并发运行状态连接,就应该有至少200*N这样大的表缓冲区空间,在这里N就是我们所运行的任意查询中最大的表数目,还必须为临时表和文件预留一些额外的文件描述器。     要确保我们所使用的操作系统能够处理由table_cache设置所暗示的打开文件描述器的数目。如果table_cache设置太大的话,MySQL有可能用完文件描述器,并且拒绝连接,执行查询失败,而且会非常不可靠。我们也可以考虑在MyISAM存储引擎中,每一个唯一的打开文件需要两个文件描述器。我们能够加大可用于MySQL的文件描述器的数目,使用--open-files-limit启动选项即可。     打开表的高速缓存保持在table_cache实体的层面上,默认数值为64;这个数值可以通过--table_cache现象更改。注意:MySQL有可能临时打开多个数目的表去执行查询操作。     在下面的环境中,MySQL关闭没有用的表并打开将其从表高速缓存中清楚:     1、当高速缓存已经满了,并且这时候有一个线程试图打开一个未在高速缓存中的表。     2、当高速缓存中含有多于table_cache实体数目的表,并且位于高速缓存中的一个表已经不再被任意线程使用。     3、当表的刷新操作发生的时候,也就是有人提交了一个FLUSH TABLES或者执行了mysqladmin -u root -p flush-tables或者mysqladmin -u root -p refresh命令的时候。   当一个表缓冲区装满的时候,服务器就使用下面的过程分配要使用的缓冲区实体:   1、从最近使用过的表开始,释放当前没有使用的表。   2、如果需要打开新表,但是缓冲区已经满了,而且没有表释放,那么缓冲区就根据需要临时扩展。   当缓冲区处于临时扩展状态,并且一个表从使用状态转换为未使用状态的时候,这个表就关闭并且从缓冲区中释放。   打开的表用于每一个并发访问。这就意味着,如果有两个线程访问同一个表或者一个线程在同一个查询中两次访问一个表的话,这个表需要打开两次(比如,通过把表与其自身连接)。每一个并发打开需要位于表高速缓冲区中的一个实体。第一次打开MyISAM表需要两个文件描述器:其中一个用于数据文件,另一个用于索引文件。除了第一次使用外,表只需要一个文件描述器用于数据文件,所有的线程共享一个索引文件描述器。   如果我们正在使用HANDLER tbl_name语句打开一个表,就分配一个专用的表对象。其他的线程不共享使用这个表对象,而且直到这个线程调用HANDLER tbl_name CLOSE或者这个线程终止才关闭。当这种情况发生的时候,这个表就会被放回表高速缓存里(如果这个缓存区还没满的话)。   通过检查mysql状态变量Opened_tables,能够决定表空间是否太小: mysql> show status like 'Opened_tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Opened_tables | 2741  |
+---------------+-------+
如果这个数值太大,即便没有发布许多FLUSH TABLES语句,我们也应该加大表高速缓存。
相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载