手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2009年08月的文章

Query Cache,看上去很美

query cache在开发中应该算是应用的挺广泛的。但事实上,在高并发网站,query cache是应该并关闭的(我是指论坛、SNS类型的网站),而应该用其他的方式进行缓存,不是用数据库。
众所周知,在设置了query cache后,连续的查询同样的sql,那么这些SQL是会被缓存下来的,然而一旦有更新cahce会被清空。数据量小的时候可能感觉不出来,如果数据量大了,其实反而是影响效率的。因此一般不太会使用。。

mysql的参数是:

XML/HTML代码
  1. # Query cache is used to cache SELECT results and later return them  
  2. # without actual executing the same query once again. Having the query  
  3. # cache enabled may result in significant speed improvements, if your  
  4. # have a lot of identical queries and rarely changing tables. See the  
  5. # "Qcache_lowmem_prunes" status variable to check if the current value  
  6. # is high enough for your load.  
  7. # Note: In case your tables change very often or if your queries are  
  8. # textually different every time, the query cache may result in a  
  9. # slowdown instead of a performance improvement.  
  10. query_cache_size=0  


taobao DBA的苏普说:

当你的数据库打开了Query Cache(简称QC)功能后,数据库在执行SELECT语句时,会将其结果放到QC中,当下一次处理同样的SELECT请求时,数据库就会从QC取得结果,而不需要去数据表中查询。

大小: 14.31 K
尺寸: 499 x 314
浏览: 1312 次
点击打开新窗口浏览全图

 在这个“Cache为王”的时代,我们总是通过不同的方式去缓存我们的结果从而提高响应效率,但一个缓存机制是否有效,效果如何,却是一个需要好好 思考的问题。在MySQL中的Query Cache就是一个适用较少情况的缓存机制。在上图中,如果缓存命中率非常高的话,有测试表明在极端情况下可以提高效率238%[1]。但实际情况如何?Query Cache有如下规则,如果数据表被更改,那么和这个数据表相关的全部Cache全部都会无效,并删除之。这里“数据表更改”包括: INSERT, UPDATE, DELETE, TRUNCATE, ALTER TABLE, DROP TABLE, or DROP DATABASE等。举 个例子,如果数据表posts访问频繁,那么意味着它的很多数据会被QC缓存起来,但是每一次posts数据表的更新,无论更新是不是影响到了cache 的数据,都会将全部和posts表相关的cache清除。如果你的数据表更新频繁的话,那么Query Cache将会成为系统的负担。有实验表明,糟糕时,QC会降低系统13%[1]的处理能力。

如果你的应用对数据库的更新很少,那么QC将会作用显著。比较典型的如博客系统,一般博客更新相对较慢,数据表相对稳定不变,这时候QC的作用会比较明显。

再如,一个更新频繁的BBS系统。下面是一个实际运行的论坛数据库的状态参数:

QCache_hit 5280438
QCache_insert 8008948
Qcache_not_cache 95372
Com select 8104159

可以看到,数据库一共往QC中写入了约800W次缓存,但是实际命中的只有约500W次。也就是说,每一个缓存的使用率约为0.66次。很难说,该 缓存的作用是否大于QC系统所带来的开销。但是有一点是很肯定的,QC缓存的作用是很微小的,如果应用层能够实现缓存,将可以忽略QC的效果。

————-下面是关于QC的一些其他细节—————–

一、Query Cache相关参数:

  • query_cache_size QC占用空间大小,通过将其设置为0关闭QC功能
  • query_cache_type 0表示关闭QC;1表示正常缓存;2表示SQL_CACHE才缓存
  • query_cache_limit 最大缓存结果集
  • query_cache_min_res_unit 手册上说,QC会按照这个值分配缓存block的大小。
  • Qcache_lowmem_prunes 这是一个状态变量(show status),当缓存空间不够需要释放旧的缓存时,该值会自增。

二、Query Cache观察:

CREATE TABLE t1(id INT,var1 varchar(10));
//Com_select:8 Qcache_hits:1
INSERT INTO t1 VALUES(1,’WWW’);
//Com_select:8 Qcache_hits:1
SELECT * FROM t1 WHERE id=1;
//Com_select:9 Qcache_hits:1
SELECT * FROM t1 WHERE id=1;
//Com_select:9 Qcache_hits:2 Qcache_queries_in_cache:1
INSERT INTO t1 VALUES(2,’RRRR’);
//Com_select:9 Qcache_hits:2 Qcache_queries_in_cache:0
SELECT * FROM t1 WHERE id=1; //INSERT后Cache失效
//Com_select:10 Qcache_hits:2 Qcache_queries_in_cache:1

参考:

  1. http://dev.mysql.com/doc/refman/5.0/en/query-cache.html
  2. http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html
  3. http://www.mysqlperformanceblog.com/2006/07/27/mysql-query-cache/

(全文完)

 本文引用地址为:http://rdc.taobao.com/blog/dba/html/325_query-cache-cool-or-not.html

Tags: query cache

字符与字节

对于数据库来说,开发人员可能更多的属于不明真相的围观群众这类人。对于字段长度或许都有所了解,对于不同的字符集所占的位数也会明白一些,但究竟是不是你想象的那样,你又真的了解多少?

看看人家玄月写的文章吧。不要不承认,其实你我都一样,都是知其然不知其所以然,而且都是看着书然后人云亦云。有时候不测试不亲自动手是看不到真相的。当然我也仅转载。我也没有测试,其实我就在真相门外徘徊。

原文如下:

字符与字节的问题
1、表t1
mysql> show create table t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`a` char(1) DEFAULT NULL,
`b` binary(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk

1)插入数据:
mysql> insert into t1 values(’w',’w'),(’中’,'中’);

mysql> select * from t1;
+——+——+
| a | b |
+——+——+
| w | w |
| 中 | ? |
+——+——+

2)插入数据被截断:
mysql> insert into t1 values(’xy’,'xy’),(’中国’,'中国’);
Query OK, 2 rows affected, 4 warnings (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 4

mysql> select * from t1;
+——+——+
| a | b |
+——+——+
| w | w |
| 中 | ? |
| x | x |
| 中 | ? |
+——+——+

2、表t2
mysql> show create table t2\G
*************************** 1. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`a` char(2) DEFAULT NULL,
`b` binary(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk

1)插入数据:
mysql> insert into t2 values(’w',’w'),(’中’,'中’);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from t2;
+——+——+
| a | b |
+——+——+
| w | w |
| 中 | 中 |
+——+——+
2 rows in set (0.01 sec)

mysql> insert into t2 values(’xy’,'xy’),(’中国’,'中国’);
Query OK, 2 rows affected, 1 warning (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 1

mysql> select * from t2;
+——+——+
| a | b |
+——+——+
| w | w |
| 中 | 中 |
| xy | xy |
| 中国 | 中 |
+——+——+

总结: char以字符来计算,一个中文一个英文都是占1个字符;
Binary以字节来计算,一个英文占1个字节,一个中文占2个字节。

原文地址:http://rdc.taobao.com/blog/dba/html/324_%e5%ad%97%e7%ac%a6%e4%b8%8e%e5%ad%97%e8%8a%82.html

佑阳记事

几件小事记录
1、会牵着大人的一只手走了。还是摇摇晃晃。但这是个好兆头啊。应该快了吧。呵呵。会自己扶着床边、墙边往前走了

2、爸爸等音节有点会发了。只是妈妈一直不会叫。

3、拿着碗喝水,但放到嘴边时,还是有点控制不住力量

4、睡觉 前讲故事。三个小猪。讲到大灰狼的时候,和妈妈一起:呼 (这是大灰狼吹小猪的房子的声音)哈哈

Tags: 肖佑阳

节日快乐

今年的七夕和去年不太一样,去年小孩还在喝奶,今年虽然不会走路,但已经会扶着东西走了啦。
送给老婆什么呢?

大小: 52.32 K
尺寸: 500 x 341
浏览: 1244 次
点击打开新窗口浏览全图

希望她会喜欢吧。

Tags: 七夕

Navicat 软件及其注册码

以下内容本人不负责,来自于Tdweb的博客:

  1. Navicat 是一个强大的MySQL数据库管理和开发工具。Navicat为专业开发者提供了一套强大的足够尖端的工具,但它对于新用户仍然是易于学习。 Navicat,使用了极好的图形用户界面(GUI),可以让你用一种安全和更为容易的方式快速和容易地创建、组织、存取和共享信息。 用户可完全控制 MySQL 数据库和显示不同的管理资料,包括一个多功能的图形化管理用户和访问权限的管理工具,方便将数据从一个数据库移转到另一个数据库中(Local to Remote、Remote to Remote、Remote to Local),进行档案备份。 Navicat 支援 Unicode,以及本地或遥距 MySQL 伺服器多连线,用户可浏览数据库、建立和删除数据库、编辑数据、建立或执行 SQL queries、管理用户权限(安全设定)、将数据库备份/复原、汇入/汇出数据(支援 CSV, TXT, DBF 和 XML 档案种类)等。新版与任何 MySQL 5.0.x 伺服器版本兼容,支援 Triggers,以及 BINARY VARBINARY/BIT 数据种类 等的风范。  
  2.   
  3. 下载地址:http://www.navicat.net.cn/index.html  
  4.   
  5. 注册码(这个才是重要些东西)  
  6.   
  7. PremiumSoft Navicat for MySQL Enterprise Edition v8.0.27 
  8. 注册码请点击上面的链接去Tdweb博客进行查询

个人觉得,navicat lite for mysql已经够我们使用了。而且。navicat还有一个缺点,知名博客yhustc的储藏箱里有介绍:害人的海猫,有空可以看看哦

 

Tags: navicat, 注册码, 数据库, mysql