MySQL管理与优化(19):应用优化

应用优化:

使用连接池:

  • 使用数据库连接池,可以复用数据库连接对象,从而减少创建新连接带来的资源消耗。

减少对MySQL的访问:

避免对同一数据做重复检索:

  • 理清应用的业务逻辑,尽量减少查询次数。

使用查询缓存:

  • 有关Mysql Query Cache的参数:
mysql> SHOW VARIABLES LIKE ‘%query_cache%‘;
+------------------------------+---------+
| Variable_name                | Value   |
+------------------------------+---------+
| have_query_cache             | YES     | --服务器是否配置高速缓存
| query_cache_limit            | 1048576 | --限制缓存单个查询结果的大小,默认1M
| query_cache_min_res_unit     | 4096    | --分配缓存时的最小块大小,默认4KB
| query_cache_size             | 1048576 | --缓存区大小,根据不同的系统会有一个最小缓存区大小
| query_cache_type             | OFF     | --0,关闭缓存, 1打开缓存, 2请求时使用缓存(使用SELECT SQL_CACHE)
| query_cache_wlock_invalidate | OFF     | --对于MyISAM表,在获取到写锁后,是否失效其他连接读缓存的请求
+------------------------------+---------+



  • 查看缓存状态:
mysql> SHOW STATUS LIKE ‘%Qcache%‘;
+-------------------------+---------+
| Variable_name           | Value   |
+-------------------------+---------+
| Qcache_free_blocks      | 1       | --查询缓存中空闲的内存块
| Qcache_free_memory      | 1031336 | --查询缓存的空闲内存数
| Qcache_hits             | 0       | --缓存采样数数目
| Qcache_inserts          | 0       | --被加入到缓存中的查询数目
| Qcache_lowmem_prunes    | 0       | --因缺少缓存而被删除的查询数目
| Qcache_not_cached       | 1       | --没有被缓存的查询数目(不能被缓存的,或由于QUERY_CACHE_TYPE)
| Qcache_queries_in_cache | 0       | --在缓存中已注册的查询数目
| Qcache_total_blocks     | 1       | --查询缓存中的块的总数目
+-------------------------+---------+

增加Cache层:

  • 即在应用端做一次缓存,这时应需要注意何时失效缓存。

负载均衡:

利用MySQL复制分流查询操作:

  • 利用MySQL主/从服务器实现读写分离,主服务器承担写操作,从服务器承担写操作,并且可以将需要复制表设置为BlackHole引擎,然后定义replicate-do-table参数只复制这些表。

采用分布式数据库架构:

  • 具体可参考MySQL的Cluster功能,分布式事务仅支持InnoDB存储引擎。

其他优化措施:

  • 对于没有删除操作的MyISAM表,INSERT和SELECT是并行的。若确实有删除操作,尽量在空闲执行批量删除操作,删除后应执行OPTIMIZE操作,消除由于删除操作带来的空洞。
  • 充分利用列有默认值的事实。只有当插入值不同于默认值时,才明确得插入值,这会减少MySQL的语法分析从而提高插入速度。
  • 表的字段尽量不使用自增长变量,在高并发情况下,该字段的自增可能对效率有比较大的影响,推荐通过应用来实现字段的自增长。

不吝指正。

MySQL管理与优化(19):应用优化

上一篇:oracle表分析


下一篇:蓝的成长记——追逐DBA(7):基础命令,地基之石