mysql 开发进阶篇系列 23 应用层优化与查询缓存
一.概述
前面章节介绍了很多数据库的优化措施,但在实际生产环境中,由于数据库服务器本身的性能局限,就必须要对前台的应用来进行优化,使得前台访问数据库的压力能够减到最小。
1. 使用连接池
对于访问数据库来说,建立连接的代价比较昂贵,因为连接到数据库服务器需要经历多个步骤如:建立物理通道,服务器进行初次握手,分析连接字符串信息,由服务器对连接进行身份验证等。因此,有必要建立"连接池"以提高访问的性能。连接池中的连接已经预先创建好了,可以直接分配给应用层使用,减少了创建新连接所消耗的资源,连接返回后,本次访问将连接交还给"连接池",以供新的访问使用。
(1)如果池中有空闲连接可用,返回该连接。
(2)如果池中连接都已用完,创建一个新连接添加到池中。
(3)如果池中连接已达到最大连接数,请求进入等待队列直到有空闲连接可用。
//下面以ado.net 连接数据库为例:
//引用 System.Data.SqlClient
//可以使用字符串connectionString来实例化SqlConnection对象
string connectionString ="Integrated Security=False;server={0};database={1};User ID={2};Password={3};Max Pool Size=512;Connect Timeout=30"; //也可以使用SqlConnectionStringBuilder类来实例化SqlConnection对象
SqlConnectionStringBuilder sqlconnStringBuilder = new SqlConnectionStringBuilder();
//连接池是否默认打开 默认为true
sqlconnStringBuilder.Pooling = true;
//连接池中最大连接数
sqlconnStringBuilder.MaxPoolSize = ;
//连接请求等待超时时间。默认为15秒,单位为秒。
sqlconnStringBuilder.ConnectTimeout = ;
sqlconnStringBuilder.DataSource = "";
sqlconnStringBuilder.UserID = "";
sqlconnStringBuilder.Password = "";
//使用用户名和密码连接
sqlconnStringBuilder.IntegratedSecurity = false; SqlConnection sql = new SqlConnection(connectionString);
//or
sql = new SqlConnection(sqlconnStringBuilder.ConnectionString); //用完后记得关闭当前连接
sql.Close(); //使用mysql一样 引用MySql.Data.dll
MySql.Data.MySqlClient.MySqlConnection mysqlconn = new MySql.Data.MySqlClient.MySqlConnection();
MySql.Data.MySqlClient.MySqlConnectionStringBuilder mysqlconnStringBuilder = new MySql.Data.MySqlClient.MySqlConnectionStringBuilder();
2.使用查询缓存
mysql的查询缓存在4.1版本以后新增的功能,它的作用是存储select 查询的文本以及相应结果。如果随后收到一个相同的查询,服务器会从查询缓存中重新得到查询结果,而不再需要解析和执行查询。查询缓存的适用对象是更新不频繁的表,当表更改(表结构和表数据)后,查询缓存值的相关条目被清空。
-- 查询缓存相关的参数
SHOW VARIABLES LIKE '%query_cache%';

参数解释:
|
have_query_cache |
表示这个mysql版本是否支持查询缓存。 |
|
query_cache_limit |
表示单个结果集所被允许缓存的最大值。 1048576.0/1024.0/1024.0=1.0M 默认1M,超过空间大小不被缓存。 |
|
query_cache_min_res_unit |
每个被缓存的结果集要占用的最小内存。 |
|
query_cache_size |
用于查询缓存的内存总大小。 1048576.0/1024.0/1024.0=1.0M 默认1M,超过空间大小不被缓存。 |
|
query_cache_type |
默认关闭缓存 |
|
query_cache_wlock_invalidate |
控制当有写锁加在表上的时候,是否先让该表相关的 Query Cache失效。 OFF: 是指在锁定时刻仍然允许读取该表相关的 Query Cache。 ON: 写锁定的同时将使该表相关的所有 Query Cache 失效。 |
-- 监视查询缓存的使用状况
SHOW STATUS LIKE 'Qcache%'

参数解释:
|
Qcache_free_memory |
查询缓存目前剩余空间大小。 |
|
Qcache_hits |
查询缓存的命中次数。 |
|
Qcache_inserts |
查询缓存插入的次数 |
|
Qcache_free_blocks |
目前还有多少剩余的blocks。FLUSH QUERY CACHE 会对缓存中的碎片进行整理,从而得到一个空闲块。这个值比较大,意味着内存碎片比较多 |
| Qcache_lowmem_prunes | 多少条Query 因为内存不足而被清除出Query Cache。缓存出现内存不足并且必须要进行清理,以便为更多查询提供空间的次数。这个数字最好长时间来看;如果这个数字在不断增长,就表示可能碎片非常严重,或者内存很少。 |
|
Qcache_not_cached |
不能被cache 的Query 的数量。不适合进行缓存查询的数量,通常是由于这些查询不是 SELECT 语句 |
|
Qcache_queries_in_cache |
当前Query Cache 中cache 的Query 数量. |
|
Qcache_total_blocks |
当前Query Cache 中的block 数量。 |
(查询缓存章节未完...)
mysql 开发进阶篇系列 23 应用层优化与查询缓存的更多相关文章
- mysql 开发进阶篇系列 2 SQL优化(explain分析)
接着上一篇sql优化来说 1. 定位执行效率较低的sql 语句 通过两种方式可以定位出效率较低的sql 语句. (1) 通过上篇讲的慢日志定位,在mysqld里写一个包含所有执行时间超过 long_q ...
- mysql 开发进阶篇系列 4 SQL 优化(各种优化方法点)
1 通过handler_read 查看索引使用情况 如果索引经常被用到 那么handler_read_key的值将很高,这个值代表了一个行被索引值读的次数, 很低的值表明增加索引得到的性能改善不高,索 ...
- mysql 开发进阶篇系列 5 SQL 优化(表优化)
一. 使用sql提示 sql 提示(sql hint)是优化数据库的一个重要手段, 是在sql语句中加入一些人为的提示来达到优化操作的目的. 1.1 use index 在查询语句中表名的后面,添加u ...
- mysql 开发进阶篇系列 1 SQL优化(show status命令)
一.概述 随着上线后,数据越来越多,很多sql语句开始显露出性能问题,本章介绍在mysql中优化sql语句的方法. 1. 通过show status 命令了解各种sql的执行频率 通过show [ ...
- mysql 开发进阶篇系列 3 SQL 优化(索引使用方法)
一. 本章介绍mysql中的索引的分类,存储,使用方法的介绍 1. 索引的存储分类 MyISAM存储引擎的表的数据和索引是自动分开存储的,各自是独立的一个文件, innodb 存储引擎的表的数据和索 ...
- mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)
一. xtrabackup 选项说明 在操作xtrabackup备份与恢复之前,先看下该工具的选项,下面记录了xtrabackup二进制文件的部分命令行选项,后期把常用的选项在补上.点击查看xtrab ...
- mysql 开发进阶篇系列 55 权限与安全(安全事项 )
一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysql的安全问题进行了解. 1. 严格控制操作系统账号和权限 在数据库服务器上要严格控制操作系统的账号和权限, ...
- mysql 开发进阶篇系列 47 物理备份与恢复(xtrabackup 的完全备份恢复,恢复后重启失败总结)
一. 完全备份恢复说明 xtrabackup二进制文件有一个xtrabackup --copy-back选项,它将备份复制到服务器的datadir目录下.下面是通过 --target-dir 指定完全 ...
- mysql 开发进阶篇系列 42 逻辑备份与恢复(mysqldump 的完全恢复)
一.概述 在作何数据库里,备份与恢复都是非常重要的.好的备份方法和备份策略将会使得数据库中的数据更加高效和安全.对于DBA来说,进行备份或恢复操作时要考虑的因素大概有如下: (1) 确定要备份的表的存 ...
随机推荐
- short s1 = 1; s1 = s1 + 1;和 short s1 = 1; s1 += 1;的问题,终于弄懂了
对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误. 对于shor ...
- 信号基础知识---单频矩形脉冲信号CW
%CW%参考:声呐技术 P27,31clc;close all;clear all;%参数-------------------------f0=50;T=0.1;%时宽B=1/T;fs=1000;% ...
- SpringBoot集成Jasypt安全框架,配置文件内容加密
我们在SpringBoot项目中的yml或者properties配置文件中都是明文的,相对而言安全性就低了很多.都知道配置文件中的都是一些数据库连接用户名密码啊.一些第三方密钥等信息.所以我们谨慎点, ...
- 2,postman的tests的断言写法
tests的断言主要是分为三类 状态码,header内容和波body内容的测试,波body的不常用( 不容易控制) pm.expect(pm.response).to.have.status(&quo ...
- POJ 3107.Godfather 树形dp
Godfather Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7536 Accepted: 2659 Descrip ...
- java多线程系列8 高级同步工具(2)CountDownLatch
CountDownLatch,计数器的初始值为线程的数量.每当一个线程完成了自己的任务后, 计数器的值就会减1.当计数器值到达0时,它表示所有的线程已经完成了任务, 然后在闭锁上等待的线程就可以恢复执 ...
- javaScript 字符串
var name = '小明'; var age = 20; var message = '你好, ' + name + ', 你今年' + age + '岁了!'; alert(message) 要 ...
- 消息模式Toast.makeText的几种常见用法
Toast 是一个 View 视图,快速的为用户显示少量的信息. Toast 在应用程序上浮动显示信息给用户,它永远不会获得焦点,不影响用户的输入等操作,主要用于 一些帮助 / 提示. Toast 最 ...
- ABP框架系列之四:(Repositories-仓库)
"Mediates between the domain and data mapping layers using a collection-like interface for acce ...
- (PMP)第13章-----项目相关方管理
13.1 识别相关方 1 相关方分类的方法: 1.1 权力/利益方格,权力/影响方格,影响/作用方格(小型项目,关系简单) 权力:基于相关方的职权级别: 利益:对项目成果的关心程度 影响:对项目成果的 ...