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