Chinaunix首页 | 论坛 | 博客
  • 博客访问: 73962
  • 博文数量: 24
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-23 14:19
文章分类
文章存档

2008年(24)

我的朋友

分类: Mysql/postgreSQL

2008-04-23 14:23:12

optimize table语句可以重新整理myisam表,愈合碎片,并且重新排序索引
 
当表经常被delete,update之后,我们需要定期优化,以减少存储空间,并使索引有序,提升sql执行效率
 
下面是一段脚本,可以设置为每周日凌晨4:00执行
如果db中表数据量多,每次执行optimize table都会要求连接一次db,可以改成先生成一个sql文件,然后一次性执行;
 
 
#!/bin/sh
#cocolala 2008/4/22
/usr/local/mysql/bin/mysql -uroot -pxxx  db -s -e "show tables ;" >/tmp/tablelist.txt
 
for tablename in `cat /tmp/tablelist.txt`
do
/usr/local/mysql/bin/mysql -uroot -pxxx db -s -e \
"
optimize table ${tablename};

echo "optimize table ${tablename} ok  "
done
 
 
0 4 * * 0 /home/mysql/optimize_table.sh >/home/mysql/optimize_table.log 2>&1
 
需要注意的是: optimize table语句会要求table lock,不要在业务正常运行时执行,以免造成业务sql的lock wait
 
在笔者实际维护的一台DB中,运行时间如下,5031个表table,优化之前占用空间18G,优化后占用15G
效果明显,但对sql语句性能影响较小,看不出明显变化
 
Uptime:                 98 days 7 hours 48 min 24 sec
 
可以过滤log文件,将optimize失败的信息发mail给管理员
 
 
 
 
--4.29补充
没有经过optimize的表用myisamchk检查时的结果
# /usr/local/mysql/bin/myisamchk -dv xxx
MyISAM file:         xxx
Record format:       Packed
Character set:       latin1_swedish_ci (8)
File-version:        1
Creation time:       2008-01-23  4:06:27
Recover time:        2008-01-23  4:06:27
Status:              open,changed
Data records:                11293  Deleted blocks:              1799
Datafile parts:              25370  Deleted data:              373036
Datafile pointer (bytes):        4  Keyfile pointer (bytes):        4
Datafile length:           2828976  Keyfile length:            508928
Max datafile length:    4294967294  Max keyfile length: 4398046510079
Recordlength:                  299
table description:
Key Start Len Index   Type                     Rec/key         Root  Blocksize
1   1     4   unique  unsigned long                  1        91136       1024
2   96    8   multip. longlong                       5       250880       1024
3   24    4   multip. unsigned long                 47       358400       1024
    21    1           int8                          33
 
optimize过的表
# /usr/local/mysql/bin/myisamchk -dv tmp_total_20071215
MyISAM file:         tmp_total_20071215
Record format:       Fixed length
Character set:       latin1_swedish_ci (8)
File-version:        1
Creation time:       2007-12-15  1:03:30
Status:              changed,analyzed,optimized keys,sorted index pages
Data records:                66840  Deleted blocks:                 0
Datafile parts:              66840  Deleted data:                   0
Datafile pointer (bytes):        4  Keyfile pointer (bytes):        3
Datafile length:          10026000  Keyfile length:            645120
Max datafile length:  644245094398  Max keyfile length:   17179868159
Recordlength:                  150
table description:
Key Start Len Index   Type                     Rec/key         Root  Blocksize
1   2     4   unique  unsigned long                  1        99328       1024
阅读(819) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:innodb中的auto_increment

给主人留下些什么吧!~~