如何解决mysql性能问题

56次阅读
没有评论

共计 2045 个字符,预计需要花费 6 分钟才能阅读完成。

这篇文章主要为大家展示了“如何解决 mysql 性能问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“如何解决 mysql 性能问题”这篇文章吧。

最近项目使用 mysql 遇到了性能问题。单表 400W 以上数据时,增,删,改,查 的速度都明显下降。
我们是做呼叫中心的,平均 1 秒钟就要处理 20 个呼叫,所以 最最保守的计算 1 秒钟也要对单表进行 20 次插入操作,还有更多的查询操作,所以对性能要求略高。(有点儿跑题。。。。)
 
遇到了问题就要解决,优化!我们优化的步骤如下 (过程中遇到的困难略):
1. 优化索引,将所有 sql 语句,尤其是速度慢的都拿出来分析,一条一条的分析。(利用 EXPLAIN)要让所有查询都使用到索引。
2. 优化数据库本身,对 my.cnf(my.ini)文件进行优化。但是个人觉得效果不是很明显(请牛人指导。)
  my.cnf 文件配置如下。(4 核 cpu 4G 内存)这个 my.cnf 具体问题具体分析,配置起来也有很多事儿比较有讲究的。
  所以需要逐步调试。(切忌不可大量修改后再重启 mysql…. 有可能启动失败。)
 
Java 代码  
[client] 
port=3306 
[mysql] 
default-character-set=utf8 
 
[mysqld] 
port=3306 
basedir= D:/Program Files/MySQL/MySQL Server 5.1/  
datadir= C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.1/Data/  
default-character-set=utf8 
default-storage-engine=INNODB 
sql-mode= STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION  
max_connections=1000 
query_cache_size=120M 
table_cache=1024M 
tmp_table_size=32M 
thread_cache_size=64 
myisam_max_sort_file_size=100G 
myisam_sort_buffer_size=64M 
key_buffer_size=512M 
 
max_allowed_packet = 32M 
max_heap_table_size = 32M 
table_open_cache = 512M 
thread_concurrency = 8 
innodb_lock_wait_timeout = 50 
bulk_insert_buffer_size = 64M 
key_cache_block_size=2048 
 
skip-external-locking 
skip-name-resolve 
 
read_buffer_size=8M 
read_rnd_buffer_size=8M 
 
sort_buffer_size=64M 
 
innodb_additional_mem_pool_size=20M 
innodb_flush_log_at_trx_commit=1 
innodb_log_buffer_size=8M 
innodb_buffer_pool_size=512M 
innodb_log_file_size=24M 
innodb_thread_concurrency=10 
 
3. 分表 分表是解决大数据量的最佳方案。
  我们的 my 单表 400 万 以上数据的时候就不符合性能要求了 (我们对性能要求有点儿高)。但是我们一天产生的数据量就达到了单表 200 万。。总不能 1 天就建立一套表出来吧??那 1,2 年以后 数据库就会有 600 多套表(一套表有几十张呢,也就是上万张单表),看着都头疼呀。。。。。
 
4. 从业务上解决,实现曲线救国。(这也是我们最后采用的方法,这个方法不一定适用其他业务)
  我们的业务是这样,1 小时对流水数据结转一次,生成统计数据。
  最后决定生成插入流水数据的时候分 2 套流水表插入(一套用来保存流水数据,另一套用来结转统计数据。)
  为什么要分成 2 套呢?
  为了性能,用来保存流水数据的那套表就不去对它进行操作了。(起到备份数据之用。)
  用来结转成统计数据的那套流水表,在结转结束之后就会删除掉以结转的数据。
  这样一来,结转用的那套流水表的数据量就不会持续增长,也就保证了数据结转的效率。
  希望对其他人 有点儿小启示。。。。。。
  请大家不要笑我。。我的 mysql 是盗版的。。。没有 mysql DBA 给我调优。更没有人会给我订制我们专用的 mysql
  只能这样曲线救国的解决了。。。。

以上是“如何解决 mysql 性能问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-15发表,共计2045字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)