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的语法分析从而提高插入速度。
  • 表的字段尽量不使用自增长变量,在高并发情况下,该字段的自增可能对效率有比较大的影响,推荐通过应用来实现字段的自增长。

不吝指正。

时间: 2024-10-05 23:25:22

MySQL管理与优化(19):应用优化的相关文章

mysql数据库的安装以及常见优化设置

原文:mysql数据库的安装以及常见优化设置 本文根据优才网课程整理,面向web开发者,内容以实用为主,专业DBA可以绕行. 如果你在大公司,可能有专门的DBA来做这些事情,如果你在一个小公司当架构师或者技术总监,或者你自己创业,那DBA的活你也得干了.咱们来讲一下基本的mysql安装和优化. 一: MYSQL安装和基本配置 在linux上安装,可以用包管理工具来安装,比较简单:RedHat 系列:yum -y install mysql mysql-server Debian系列:sudo a

Mysql数据库调优和性能优化

1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开源数据库,但是mysql数据库的默认设置性能非常的差,仅仅是一个玩具数据库.因此在产品中使用MySQL数据库必须进行必要的优化. 优化是一个复杂的任务,本文描述MySQL相关的数据库设计和查询优化,服务器端优化,存储引擎优化. 2. 数据库设计和查询优化 在MySQL Server性能调优中,首先要考虑的就是Database Schema设计,和

mysql性能优化-索引与优化

http://hongge.blog.51cto.com/ 一.MySQL性能优化之-影响性能的因素 1.商业需求的影响 不合理需求造成资源投入产出比过低,这里我们就用一个看上去很简单的功能来分析一下. 需求:一个论坛帖子总量的统计,附加要求:实时更新 从功能上来看非常容易实现,执行一条SELECT COUNT(*) from 表名 的Query 就可以得到结果.但是,如果我们采用不是MyISAM 存储引擎,而是使用的Innodb 的存储引擎,那么大家可以试想一下,如果存放帖子的表中已经有上千万

MYSQL 分析表、检查表和优化表

1. 对表进行优化 ( 优化表主要作用是消除删除或者更新造成的空间浪费) 2. 对表进行分析(分析关键字的分布, 分析并存储MyISAM和BDB表中键的分布) 3. 对表进行检查(检查表的错误,并且为MyISAM更新键的统计内容) 4. 对表进行修复(修复被破坏的MyISAM表)   1.分析表   MySQL中使用ANALYZE TABLE语句来分析表,该语句的基本语法如下:   ANALYZE TABLE 表名1 [,表名2…] ; 使用ANALYZE TABLE分析表的过程中,数据库系统会

Python+Mysql生成zabbix统计数据(优化)

周末重新整理了一下,把有些不合理的地方改了下,自我感觉好多了 ZabbixReport.py #!/usr/bin/python #coding:utf-8 import MySQLdb import time,datetime #zabbix数据库信息: zdbhost = '192.168.1.100' zdbuser = 'zabbix' zdbpass = 'zabbixreport' zdbport = 3306 zdbname = 'zabbix' #生成文件名称: xlsfilen

mysql in 子查询 效率慢 优化(转)

现在的CMS系统.博客系统.BBS等都喜欢使用标签tag作交叉链接,因此我也尝鲜用了下.但用了后发现我想查询某个tag的文章列表时速度很慢,达到5秒之久!百思不解(后来终于解决),我的表结构是下面这样的,文章只有690篇. 文章表article(id,title,content)标签表tag(tid,tag_name)标签文章中间表article_tag(id,tag_id,article_id)其中有个标签的tid是135,我帮查询标签tid是135的文章列表用以下语句时发现速度好慢,我文章才

MySQL性能调优与架构设计——第10章 MySQL数据库Schema设计的性能优化

第10章 MySQL Server性能优化 前言: 本章主要通过针对MySQL Server(mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化,但不包括mysqld之外的比如存储引擎相关的参数优化,存储引擎的相关参数设置建议将主要在下一章“常用存储引擎的优化”中进行说明. 10.1 MySQL 安装优化 选择合适的发行版本 1. 二进制发行版(包括RPM等包装好的特定二进制版本) 由于MySQL开源的特性,不仅仅MySQL AB提供了多个平

mysql优化之参数优化(转)

1.优化方式 硬件优化=>系统优化=>mysql配置优化=>SCHEMA优化=>sql优化=>其他解决方案(redis or MongoDB or Cassandra or HBase) 2.mysql配置分析 1)常见瓶颈 90%系统瓶颈都在IO上,所以提高IOPS尤为总要,iowait过高,加内存,减小数据读取量 如果CPU很高,或者查询时间很长,90%索引不当 如果系统发生swap,必定是内存分配不当 所以优化,总是会围绕着提高对内存的使用率+减少IO,比如内存缓存+索

mysql优化之参数优化

1.优化方式 硬件优化=>系统优化=>mysql配置优化=>SCHEMA优化=>sql优化=>其他解决方案(redis or MongoDB or Cassandra or HBase) 2.mysql配置分析 1)常见瓶颈 90%系统瓶颈都在IO上,所以提高IOPS尤为总要,iowait过高,加内存,减小数据读取量 如果CPU很高,或者查询时间很长,90%索引不当 如果系统发生swap,必定是内存分配不当 所以优化,总是会围绕着提高对内存的使用率+减少IO,比如内存缓存+索

MySQL索引使用方法和性能优化

关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能会产生几十万甚至几百万的数据,没有索引查询会变的非常缓慢.还是以WordPress来说,其多个数据表都会对经常被查询的字段添加索引,比如wp_comments表中针对5个字段设计了BTREE索引. 一个简单的对比测试 以我去年测试的数据作为一个简单示例,20多条数据源随机生成200万条