MYSQL优化-调度并发缓存

MYSQL优化-调度并发缓存

作者:LAMP小白  点击:2693  发布日期:2012-11-12 23:28:00  返回列表
调度和锁定

MYSQL的默认调度策略如下:

*写入比读取有更高的优先权
*对数据表的写操作必须按照写请求先来后到的顺序一个一个的进行
*同一个数据表进行的读操作可以同时进行
*对数据表进行写入操作的客户程序必须具有对数据表唯一访问的锁定

LOW_PRIORITY关键字影响DELETE INSERT LOAD_DATA REPLACE 和 UPDATE语句的调度
HIGH_PRIORITY 影响SELECT INSERT
DELAYED 影响 INSERT REPLACE

使用并发插入
MYISAM存储引擎对读取者锁定写入者的通用原则有一个特例,这种情况是发生在MYISAM数据表在数据文件里没有空洞的时候
在这种情况下,INSERT语句只能在数据行的末尾而不是中间位置添加数据行

*不要在INSERT语句中使用LOW_PRIORITY修饰符,这会使SELECT语句总是锁定INSERT从而导致并发插入不能完成
*需要显式锁定数据表又想允许并发插入应该使用LOCK TABLES...READ LOCAL 而不是 LOCK TABLES...READ
*应该给LOAD DATA操作加上CONCURRENT限定符,让给定数据表上的SELECT语句在该数据表正在加载数据的同时仍可以执行
*内部有空洞的MYISAM数据表可以用OPTIMIZE TABLE进行碎片整理

使用MYISAM键缓存

如果MYSQL执行的一条语句使用了来自MYISAM数据表的索引,他将使用一个键缓存来容纳那些索引值,这种缓存有助于减少IO并提高速度

1.创建一个新的键缓存
mysql> SET GLOBAL member_cache.key_buffer_size = 1024 * 1024;
Query OK, 0 rows affected (0.05 sec)

2.指定一张数据表(只能MYISAM引擎)
mysql> CACHE INDEX user_list IN member_cache;
+---------------+--------------------+----------+---------------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+---------------+--------------------+----------+---------------------------------------------------------------------+
| mio.user_list | assign_to_keycache | note | The storage engine for the table doesn't support assign_to_keycache |
+---------------+--------------------+----------+---------------------------------------------------------------------+
1 row in set (0.04 sec)

mysql> CACHE INDEX article IN member_cache;
+-------------+--------------------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-------------+--------------------+----------+----------+
| mio.article | assign_to_keycache | status | OK |
+-------------+--------------------+----------+----------+
1 row in set (0.01 sec)

3.加载索引
mysql> LOAD INDEX INTO CACHE article;
+-------------+--------------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-------------+--------------+----------+----------+
| mio.article | preload_keys | status | OK |
+-------------+--------------+----------+----------+
1 row in set (0.00 sec)

使用查询缓存

查询是否支持查询缓存
mysql> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+
1 row in set (0.00 sec)

设置查询缓存
[mysqld]
query_cache_type = 1
query_cache_size = 16M


上一篇:MYSQL优化-数据部分 下一篇:快递查询API
0