巧用query cache

  • 时间:
  • 浏览:1
  • 来源:UU直播快三官方_大发UU直播快3

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

mysql> set global query_cache_size=1024*1024*32;

Query OK, 0 rows affected (0.02 sec)

root@xxxx ~

# my 1503

Entry Port ==== 1503

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 41501147

Server version: 5.1.61-Alibaba-39150-log Source distribution

能非要看了查询不需要 变快的返回,应用立刻恢复正常。

这种状况很有有时候是有慢sql占用了连接池中的连接这麼释放,愿因后续进来的请求迟迟获取非要连接池中的连接,愿因请求报错,登录数据库排查发现如下sql突然跳出执行非常的慢:

Copyright (c) 1150, 2011, Oracle and/or its affiliates. All rights reserved.

mysql> select * from user where md5(nick)=’3f59150f59ddf2a0d14a441615040e348f?

Empty set (0.00 sec)

一并应用报错超出了数据库的最大连接数:max connections:

mysql> Ctrl-C — exit!

Aborted

PS:query cache的打开是有一定场景的,有时候query cache无须适合更新,插入,删除非常大的应用,可是我打开query cache一定要慎重,笔者这麼 看了有时候其数据库有少量的插入和更新的数据库打开query cache而愿因整个数据库都在等待query cache的故障:

mysql> show variables like ‘%query%’;

+——————————+——————————————-+

| Variable_name | Value |

+——————————+——————————————-+

| ft_query_expansion_limit | 20 |

| have_query_cache | YES |

| long_query_time | 1.000000 |

| query_alloc_block_size | 8192 |

| query_cache_limit | 1048576 |

| query_cache_min_res_unit | 4096 |

| query_cache_size | 0 |

| query_cache_type | ON |

| query_cache_wlock_invalidate | OFF |

| query_prealloc_size | 8192 |

| slow_query_log | ON |

| slow_query_log_file | /home/mysql/data1503/mysql/slow_query.log |

+——————————+——————————————-+

12 rows in set (0.00 sec)

收到一用户反馈其应用日志中狂报错误,获取连接超时:

通常状况下不需要 用户修改应用,将应用中的md5函数去掉 ,有时候修改业务的法子 还不需要 一段时间,非要够立刻是业务恢复,可是我看看数据库还有这麼可是我的法子 ,灵机一动,有时候该应用的场景是读多写非常少的应用,想到了query cache:

mysql> use cuxiaowang_db

Database changed

mysql> select * from user where md5(nick)=’3f59150f59ddf2a0d14a441615040e348f?’;

Empty set (1.32 sec)

mysql> explain select * from user where md5(nick)=’3f59150f59ddf2a0d14a441615040e348f?

+—-+————-+——-+——+—————+——+———+——+——–+————-+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+—-+————-+——-+——+—————+——+———+——+——–+————-+

| 1 | SIMPLE | user | ALL | NULL | NULL | NULL | NULL | 2561508 | Using where |

+—-+————-+——-+——+—————+——+———+——+——–+————-+

1 row in set (0.00 sec)

一眼能非要看出在nick上使用了md5函数,愿因user表中的索引非要使用,而全表扫描:

mysql> select * from user where md5(nick)=’3f59150f59ddf2a0d14a441615040e348f’;

Empty set (1.32 sec)