xml地图|网站地图|网站标签 [设为首页] [加入收藏]
当前位置: www8029com > 澳门新葡8522最新网站 > 正文

读书笔记,应用层优化与查询缓存

时间:2019-08-05 15:48来源:澳门新葡8522最新网站
一.概述 前边章节介绍了广大数据库的优化措施,但在骨子里生育条件中,由于数据库服务器自身的质量局限,就亟供给对前台的应用来进展优化,使得前台访谈数据库的压力可以减到

一.概述    

  前边章节介绍了广大数据库的优化措施,但在骨子里生育条件中,由于数据库服务器自身的质量局限,就亟供给对前台的应用来进展优化,使得前台访谈数据库的压力可以减到细微。
  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 = 512;
            //连接请求等待超时时间。默认为15秒,单位为秒。
            sqlconnStringBuilder.ConnectTimeout = 30;
            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%';

澳门新葡8522最新网站 1

        参数解释:

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%' 

澳门新葡8522最新网站 2

      参数解释:

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 数量。

  (查询缓存章节未完...)

1:使用数据库连接池

  • 什么样是数据库连接池?

    • 数据库连接池(Connection pooling)是 程序运转时 创建充分的数据库连接,并将这么些连接组成二个连接池,由程序动态地对池中的连接实行申请,使用,释放。
  • 干什么要利用数据连接池?

    • 澳门新葡8522最新网站,透过数据库连接池能够一贯将有个别数据连接对象分配给使用使用,由于数量连接对象是先后起始化时贮存在连接池中,那时直接动用就省去了 创制新连接 所消耗的能源。连接再次回到后,这次访问将接连交还给 “连接池” 以供新的会见使用。
  • 数据库连接池运维机制

    • (1) 程序初阶化时制造连接池
    • (2) 使用时向连接池申请可用连接
    • (3) 使用完成,将一而再返还给连接池
    • (4) 程序退出时,断开全数连接,并释放财富

    ##### 守旧访谈数据库方式

    澳门新葡8522最新网站 3

    image

    ##### 数据库连接池访谈数据库情势

    澳门新葡8522最新网站 4

    image

谢谢 && 参照他事他说加以考察著作

数据库连接池的敞亮和应用

研究数据库连接池的规律

PHP 设计情势类别 - 对象池形式(Object Pool)


2:减少对MySQL的访问

  • 2.1:制止对同一数据做重新查询(压缩数据库查询采访

  • 2.2:使用查询缓存(Query Cache

    • 功用:存款和储蓄 select 查询的公文以及相应的结果。要是之后接到二个 同一的询问。服务器会从 询问缓存 重新获得查询结果,而不再需求 解析执行 查询

    • 查询缓存 的应用对象是 立异不频仍 的表;当表更换(数据 || 结构)后,查询缓存 值相关条文将被清空。

    • 询问缓存查看

    mysql> show variables like '%query_cache%';
    
    #开启查询缓存
    mysql> set session query_cache_type = ON;
    

    澳门新葡8522最新网站 5

    QUERY_CACHE参数及开启.png

  • 恢宏-MySQL体系布局

澳门新葡8522最新网站 6

MySQL种类结构.png

2.3:增加 Cache 层(应用层达成)


3:负载均衡(Load Balance)

  • 3.1:主从复制,读写分离

  • 3.2:使用布满式数据库架构


4:其余优化措施

  • 4.1:对于利用MyISAM的数据表,定时施行 optimize table tableName 操作。

    • 只顾,在OPTIMIZE TABLE运营进度中,MySQL会锁定表。
  • 4.2:丰盛应用列 存在暗中同意值 的实情。唯有当插入值差异与暗许值时,才理解插入值。因为那会巨惠扣 MySQL 所做的 语法解析 进而升高插入速度。

  • 4.3:表的非主键字段尽量不要使用 自拉长变量

《深入显出MySQL 数据库开拓 优化与治本有限支撑第2版》

编辑:澳门新葡8522最新网站 本文来源:读书笔记,应用层优化与查询缓存

关键词: www8029com