首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

mysql TableMap id递增有关问题

2013-02-19 
mysql TableMap id递增问题mysql show variables like table%+------------------------+-------+| Va

mysql TableMap id递增问题
mysql> show variables like 'table%';+------------------------+-------+| Variable_name | Value |+------------------------+-------+| table_definition_cache | 2048 | | table_open_cache | 2048 | +------------------------+-------+

?

?

2. ?查询当前使用的table def

?

mysql> show status like 'open%';+--------------------------+----------+| Variable_name            | Value    |+--------------------------+----------+| Open_files               | 14       | | Open_streams             | 0        | | Open_table_definitions   | 2048     | | Open_tables              | 2048     | | Opened_files             | 47198363 | | Opened_table_definitions | 1183     | | Opened_tables            | 1342     | +--------------------------+----------+

?

?

所以基本上table def cache一直是处于满的状态,统计了下表,因为存在分库分表,所以一个数据库实例上的表超过了6000张。

cache 2048 , ?table 6000张,势必会出现频繁的换入换出,这也就难怪table_id频繁增长了

?

?

解决

1. ?tablemap cache策略以事务为单位进行局部cache,事务结束后清空tablemap cache,所以tableId的频繁增长不再会受到影响

2. ?表结构的cache独立出来,以schmea + table name做为cache key,总的cache数也就会<=数据库中的表的总数

?

可以做的一个优化:

1. ?针对分库分表的业务,基本上字段定义都是一样的,从内存dump的分析来看,一张表50个字段,表结构的定义大小大概为6kb,大部分都几种在column name(文本),其实可以利用String.intern()进行共享内存,1024张的分表可以只用一份表结构定义,内存可以从6MB -> ?6KB.?

?

针对table_id增长的问题,这里还有一个其他风险:淘宝物流MySQL slave数据丢失详细原因

?

热点排行