Wednesday, January 20, 2010

MySQL 杂七杂八#内存相关#thd

1. MySQL中对数据库和表的操作是区分大小写的,而对数据列则不区分,猜测这是Query Cache中区分大小写的原因之一。

2. MySQL中的system variables: 分为storage engine和 SQL Layer 两层。部分只作用于storage engine,其余在SQL layer上使用,因此会作用到整个系统。
ref: http://www.mysqlperformanceblog.com/2006/06/08/mysql-server-variables-sql-layer-or-storage-engine-specific/

3. thd 默认大小,有说256KB,也有192KB,用于thread stack 和 net buffer, 做简单查询时,会少量增加。

4. thread_cache_size 默认为0,表示系统不对thd进行缓存,每个新链接结束时就被销毁。

5. 一些与内存相关的变量:
    全局性的:key_buffer_size, innodb_*,  query_cache_size, tmp_table_size
    线程相关的:join_buffer_size, read_buffer_size, read_rnd_buffer_size, sort_buffer_size
ref: http://forge.mysql.com/wiki/ServerVariables
     http://www.mysqlperformanceblog.com/2006/06/08/mysql-server-variables-sql-layer-or-storage-engine-specific/

6. table 相关的cache
从代码来看,table_cache就是一个hash表,其上定义了一些通过主键来取值的操作。
typedef struct st_hash {
  size_t key_offset,key_length;        /* Length of key if const length */
  size_t blength;
  ulong records;
  uint flags;
  DYNAMIC_ARRAY array;                /* Place for hash_keys */
  my_hash_get_key get_key;
  void (*free)(void *);
  CHARSET_INFO *charset;
} HASH;
其大小应该是在系统变量table_open_cache中定义。
在sql/sql_base.cc 2764行是从table_cache中查找、打开表的操作。
利用show open tables 可以查看当前打开的表。

7. MySQL的内部线程[待查]
在understanding mysql internal page41介绍THD类时提到:
replication slave threads
delayed insert threads

8. 关于thread的state描述
http://dev.mysql.com/doc/refman/5.5/en/general-thread-states.html






Sincerely,

ZHOU Yuan <j0sf>

No comments:

Post a Comment