您当前的位置:首页 > 学海无涯 > 心得笔记网站首页心得笔记
Mysql优化
发布时间:2015-11-09作者:佚名
减少对Mysql的访问
避免对同一数据做重复检索:
应用中需要理清楚对数据库的访问逻辑,需要对相同表的访问,尽量集中在相同sql
访问,一次提取结果,减少对数据库的重复访问。
使用 mysqlquerycache:
作用:查询缓存存储SELECT查询的文本以及发送给客户端的相应结果。如果随后收到
一个相同的查询,服务器从查询缓存中重新得到查询结果,而不再需要解析和执行查询。
适用范围:不发生数据更新的表。当表更改 (包括表结构和表数据)后,查询缓存值
的相关条目被清空。
查询缓存的主要参数设置:
show variables like ‘%query_cache%’;
have_query_cache表明服务器在安装使已经配置了高速缓存
query_cache_size表明缓存区大小,单位为M
query_cache_type的变量值从0到2,含义分别为
0或者off (缓存关闭)
1或者on (缓存打开,使用sql_no_cache的select除外)
2或者demand (只有带sql_cache的select语句提供高速缓存)
在 SHOW STATUS 中,你可以监视查询缓存的性能:
变量 含义
Qcache_queries_in_cache 在缓存中已注册的查询数目
Qcache_inserts 被加入到缓存中的查询数目
Qcache_hits 缓存采样数数目
Qcache_lowmem_prunes 因为缺少内存而被从缓存中删除的查询数目
Qcache_not_cached 没有被缓存的查询数 目 (不能被缓存的,或由 QUERY_CACHE_TYPE)
Qcache_free_memory 查询缓存的空闲内存总数
Qcache_free_blocks 查询缓存中的空闲内存块的数目
Qcache_total_blocks 查询缓存中的块的总数目
加cache层:
Cache (高速缓存)、Memory (内存)、Hard disk (硬盘)都是数据存取单元,但存取
速度却有很大差异,呈依次递减的顺序。对于CPU来说,它可以从距离自己最近的Cache高
速地存取数据,而不是从内存和硬盘以低几个数量级的速度来存取数据。而Cache中所存储
的数据,往往是CPU要反复存取的数据,有特定的机制 (或程序)来保证Cache内数据的命
中率 (Hit Rate)。因此,CPU存取数据的速度在应用高速缓存后得到了巨大的提高。
因为将数据写入高速缓存的任务由Cache Manager负责,所以对用户来说高速缓存的
内容肯定是只读的。需要你做的工作很少,程序中的SQL语句和直接访问DBMS时没有分别,
返回的结果也看不出有什么差别。而数据库厂商往往会在DB Server的配置文件中提供与
Cache相关的参数,通过修改它们,可针对我们的应用优化Cache的管理。
负载均衡
利用 mysql 复制分流查询操作:
利用mysql的主从复制可以有效的分流更新操作和查询操作,具体的实现是一个主服
务器,承担更新操作,多台从服务器,承担查询操作,主从之间通过复制实现数据的同步。
多台从服务器一方面用来确保可用性,一方面可以创建不同的索引满足不同查询的需要。
对于主从之间不需要复制全部表的情况,可以通过在主的服务器上搭建一个虚拟的从
服务器,将需要复制到从服务器的表设置成blackhole引擎,然后定义replicate-do-table
参数只复制这些表,这样就过滤出需要复制的binlog,减少了传输binlog的带宽。因为搭
建的虚拟的从服务器只起到过滤binlog的作用,并没有实际纪录任何数据,所以对主数据
库服务器的性能影响也非常的有限。
通过复制分流查询的存在的问题是主数据库上更新频繁或者网络出现问题的时候,主
从之间的数据可能存在差异,造成查询结果的异议,应用在设计的时候需要有所考虑。
采用分布式数据库架构:
mysql从5.0.3开始支持分布式事务,当前分布式事务只对Innodb存储引擎支持。
分布式的数据库架构适合大数据量,负载高的情况,有良好的扩展性和高可用性。通过在多
台服务器之间分布数据实现在多台服务器之间的负载平均,提高了访问的执行效率。具体实
现的时候,可以使用mysql的Cluster功能(NDB引擎)或者自己编写程序来实现全局事务。
关键字词:Mysql,优化

上一篇:Jemalloc内存管理优化
下一篇:70个经典的 Shell 脚本