2007年12月17日星期一

mysql状态变量——select%

mysql有很多的状态变量,而且随着版本的升级,状态变量也是越来越来多!
mysql>show status like ''select%';
可以得到我今天过关心的几个关于联表查询的几个状态变量。

Select_full_join
没有使用索引的联表查,如果这个值非0的时候,我们就要检查我们的索引是否合适,特别的针对联表查询。
Select_full_range_join
我不太确定它的含义,大致应该是对引用的表做了一个范围连接。
Select_range
在连接过程对第一张表做范围选择,即使这个值比较大也没有什么问题
Select_range_check
(The number of joins without keys that check for key usage after each row. If this is not 0, you should carefully check the indexes of your tables.)
连接没有使用索引,但却在每一个都去检查时候有可用的索引,如果它不为0,我们就应该检查下我们建立的索引是够恰当了
Select_scan
联表查询中对第一张表进行了全表查询

下面一张图是索引建立有问题的数据库状态

2007年12月11日星期二

mysql 开发中的代码--clone

当开源世界都在使用svn,或者开始转向svn的时候!mysql依旧使用着bk
我不清楚bk有什么好处,但是我知道,我想得到开发中的mysql5.1的源代码,我就必须只用bk
bitkeep上下载bk-clinet,
/bin/sh bk-client2.0.shar
cd bk-client2.0
make

./bkf clone bk://mysql.bkbits.net/mysql-5.1 /home/mysql-5.1

具体帮助可以在bitkeep网站找到
就此得到了mysql5.1开发中的源码,check out的时间有点长:)

同步开发中的代码
/home/bk-client2.0/bkf pull(类似于svn up)

httpd缓存模块mod_cache试用

当我们只有一台web前端或者服务器不够用的时候,但是我们又有比较多类似cms更新不平凡的页面和js,css,图片等静态元素的时候!我们是选择直接套squid还是使用后起的varish或者使用apache的mod_cache模块给我们提供的缓存功能呢!
前些天我尝试使用了apache的mod_cache模块,这个模块里面有mod_disk_cache(硬盘缓存),mod_mem_cache(内存缓存)。
Sample httpd.conf

#
# Sample Cache Configuration
#
LoadModule cache_module modules/mod_cache.so


#LoadModule disk_cache_module modules/mod_disk_cache.so

CacheRoot c:/cacheroot
CacheSize 256
CacheEnable disk /
CacheDirLevels 5
CacheDirLength 3


LoadModule mem_cache_module modules/mod_mem_cache.so

CacheEnable mem /
MCacheSize 4096
MCacheMaxObjectCount 100
MCacheMinObjectSize 1
MCacheMaxObjectSize 2048


配置的添加也是类似手册上的,只是稍作修改。
使用初期,感觉指令蛮多,功能也比较强大(当然和squid比还是欠缺)
CacheDefaultExpire 86400 (默认过期时间设置)
CacheDisable /local_files (不cacheURL在/ocal_files下的)
CacheEnable mem /manual (分内存cache,fd(文件描述符)cache,和硬盘cache)
CacheEnable fd /images
CacheEnable disk /
CacheForceCompletion 80 (2.0的文档里说还没哟实现的指令)
CacheIgnoreCacheControl On (忽略原始页面的对缓存控制的信息,eg.no-cache or no-store)
CacheIgnoreHeaders Set-Cookie
CacheIgnoreNoLastMod On
CacheLastModifiedFactor 0.5
CacheMaxExpire 604800


mod_disk_cache下面的指令
CacheDirLength 4
CacheDirLevels 5
CacheExpiryCheck Off (2.0.59还没有实现)
CacheGcClean 12 /daily_scripts (2.0.59还没有实现)
CacheGcDaily 23:59 (2.0.59还没有实现)
CacheGcInterval 24 (2.0.59还没有实现)
CacheGcMemUsage 16 (2.0.59还没有实现)
CacheGcUnused 12 /local_images (2.0.59还没有实现)
CacheMaxFileSize 64000
CacheMinFileSize 64
CacheRoot c:/cacheroot
CacheSize 5000000
CacheTimeMargin X (2.0.59还没有实现)

mod_mem_cache下面的指令
MCacheMaxObjectCount 13001
MCacheMaxObjectSize 6400000
MCacheMaxStreamingBuffer 65536
MCacheMinObjectSize 10000
MCacheRemovalAlgorithm GDSF
MCacheRemovalAlgorithm LRU
MCacheSize 700000

由于我使用的httpd是2.0.59版本的,所以很多功能都还没有实现,特别是硬盘缓存的时候,有些页面会莫名的白页,而且缓存空间的大小会一直增加下去,没有手册上讲的,当大于你所设置的cache大小后,会慢慢删除过期缓存的现象!但是内存缓存还是很好用的!
希望新版本的cache模块能更好用,至少在小部分范围内能更稳定,至少不出现白页!

squid问题-httpReadReply: Excess data from

2007/12/06 05:03:13| httpReadReply: Excess data from "HEAD http://***.***.com/leexn/categories/45604/"
2007/12/06 05:03:15| httpReadReply: Excess data from "HEAD http://***.***.com/nemomama/entry/96901"
一早起来就发现一台squid报警 ,查看了cache.log,发现不停的报上面的出错信息,从字面上理解是返回的数据过多的意思!我不太清楚具体问题是怎么出来的!但是我曾经在apache和php里面多次设定expire time的时候,也出现过类似的问题,当时请求的方法不是head而是get!
我查看了下请求的url的header,没有多次设置的问题,一大早,正在不知所措的时候,突然发现,squid报fd过少!正想调整下os的fd,这时,我已经连不上服务器了!
最后联系机房,当我一直还在思考出错来源的时。网络好了,我仔细的查看了相关的日志,发现该出错信息不见了!
通过流量和网络连接的相关监控,发现上述的出错信息和网络连通状况有很大的联系!
虽然我现在还不太清楚他们之间 具体的因果关系,但很显然是有关系的!所以以后出现类似的问题,要先测试一下网络状况怎么样。:)
也希望有人能告诉我他们之间具体的因果关系。