大家好,通用的MySql优化大作已经拜读不少。但是对于我最近碰到的一个情况,我觉得应该超出了通用的优化范围,请有经验的前辈指点指点。环境如下:
1。表1里面有大约1亿的记录,每天晚上由一个独立的程序向表中添加记录(每天大约插入50万记录,插入期间允许数据库不可用、不可访问),其它时间由web进行读取访问。
2。整个数据库的表不足20张,其余表都类似表1,但是数据量都不大。目前已经进行的优化是,
1,表采用MyISAM引擎,对数据按时间字段进行分区,每月一个分区,web访问时会提供时间字段。
2,去掉了数据库的binlog。我的问题是:
1,是否还有锁的优化,由于是只有特定的时间独占写入数据,其余时间都是只读,如何进一步优化?
2,请教任何其他的优化
1。表1里面有大约1亿的记录,每天晚上由一个独立的程序向表中添加记录(每天大约插入50万记录,插入期间允许数据库不可用、不可访问),其它时间由web进行读取访问。
2。整个数据库的表不足20张,其余表都类似表1,但是数据量都不大。目前已经进行的优化是,
1,表采用MyISAM引擎,对数据按时间字段进行分区,每月一个分区,web访问时会提供时间字段。
2,去掉了数据库的binlog。我的问题是:
1,是否还有锁的优化,由于是只有特定的时间独占写入数据,其余时间都是只读,如何进一步优化?
2,请教任何其他的优化
1,表采用MyISAM引擎,对数据按时间字段进行分区,每月一个分区,web访问时会提供时间字段。
2,去掉了数据库的binlog。
(BINLOG仅对insert / update / delete等有效果,如果都是SELECT的话,关不关应该影响不大)我的问题是:
1,是否还有锁的优化,由于是只有特定的时间独占写入数据,其余时间都是只读,如何进一步优化?
没有
2,请教任何其他的优化
根据常用的查询建立相关索引
建议打开BINLOG,你的本比较大,一旦出问题,恢复困难;
定期对表进行清理;
在查询字段上建立适当索引。
如果确实没有针对性的优化,近期结贴。
如果查询慢的话,你可以从多方面检查:
1.sql语句是否存在查询:
可以打开slow query log检查,
2.索引是否查询时生效了。
搞个主从吧。 主上面用ARCHIVE引擎,从上面用MYISAM或者INNODB引擎。
1,是否还有锁的优化,由于是只有特定的时间独占写入数据,其余时间都是只读,如何进一步优化?
答:mysql默认是写锁优先,你可以改成读锁优先,这样可以部分优化select性能。
用--low-priority-updates启动mysqld。这将给所有更新(修改)一个表的语句以比SELECT语句低的优先级。
2,请教任何其他的优化。
答:鉴于楼主的表1的数据很大,可以考虑把表1的分区粒度减少,一个月一个可能有点大,可以考虑每周一个分区。
另外,检查索引的建立是否合理,在查询中是否恰当的使用了它们。
1,在数据按月分区优化存储。
2,KeyBuffer 2G。在记录数9千万时,采用按月的日期段进行查询(日期字段有索引,其他条件字段类型varchar(24)、无索引),查询可在16秒左右有结果,比不分区情况下提高10-20倍。
优化的结果基本满意,接下来主要是应用的优化,根据情况建立索引。针对性开通QueryCache。