search
HomeDatabaseMysql Tutorial第十七章配置SQLServer(3)配置“对即时负载的优化”

前言: 在第一次执行查询或者存储过程时,会创建执行计划并存储在SQLServer的过程缓存内存中。在很多时候,我们会执行一些简单的程序,仅仅执行一次,而为这些查询创建存储过程是非常浪费内存资源的。由于内存不足,可能会导致你的缓存溢出,从而影响性能。

前言:

        在第一次执行查询或者存储过程时,会创建执行计划并存储在SQLServer的过程缓存内存中。在很多时候,我们会执行一些简单的程序,仅仅执行一次,而为这些查询创建存储过程是非常浪费内存资源的。由于内存不足,可能会导致你的缓存溢出,从而影响性能。在2005之前,这是一个大问题,为了纠正这个问题。微软在SQLServer 2008中引入了对即时查询负载的优化功能。这个功能在2012也依旧可用。是基于实例级别的。

        很多开发人员直接在生产环境运行和测试查询,如果没有得到期望的结果,会更改查询然后再次执行,这会对过程缓存造成很大压力。所以尽量不要这样做。

 

准备工作:

在开始之前,在测试服务器清空缓存,但是切记不要在生产环境这样做:

1、 先看看有多少数据保存在缓存中:


SELECT  CP.usecounts AS CountOfQueryExecution ,
        CP.cacheobjtype AS CacheObjectType ,
        CP.objtype AS ObjectType ,
        ST.text AS QueryText
FROM    sys.dm_exec_cached_plans AS CP
        CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS ST
WHERE   CP.usecounts > 0
GO



结果如下:


第十七章配置SQLServer(3)配置“对即时负载的优化”

2、 清空缓存和缓冲池:

DBCC FREEPROCCACHE 
GO


3、 如果想检查是否清空成功,可以再次执行步骤1中的语句: 

 第十七章配置SQLServer(3)配置“对即时负载的优化”

步骤:

1、 执行下面语句:


USE AdventureWorks
GO
SELECT  *
FROM    Sales.SalesOrderDetail
WHERE   SalesOrderDetailID = 43659
GO


2、 检查在运行了上面语句后是否有计划缓存,再次执行之前查询计划缓存的语句: 

SELECT  CP.usecounts AS CountOfQueryExecution ,
        CP.cacheobjtype AS CacheObjectType ,
        CP.objtype AS ObjectType ,
        ST.text AS QueryText
FROM    sys.dm_exec_cached_plans AS CP
        CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS ST
WHERE   CP.usecounts > 0
GO



3、 下面是结果,当然,也可以在where条件中用like来减少查找的数据量:也可以使用ctrl+alt+a来开启活动监视器来查找运行时间长的查询。

第十七章配置SQLServer(3)配置“对即时负载的优化”

4、 现在来把Optimize for Ad hoc Workloads设为1:

 EXEC sp_configure 'optimize for ad hoc workloads', 1
RECONFIGURE
GO



5、 然后再次清空缓存: 

DBCC FREEPROCCACHE 
GO


6、 再次执行语句:


USE AdventureWorks
GO
SELECT  *
FROM    Sales.SalesOrderDetail
WHERE   SalesOrderDetailID = 43659
GO


7、 可以执行下面的语句检查是否有新的缓存进入: 

SELECT  CP.usecounts AS CountOfQueryExecution ,
        CP.cacheobjtype AS CacheObjectType ,
        CP.objtype AS ObjectType ,
        ST.text AS QueryText
FROM    sys.dm_exec_cached_plans AS CP
        CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS ST
WHERE   CP.usecounts > 0
        AND ST.text LIKE '%SELECT  *  FROM    Sales.SalesOrderDetail  WHERE   SalesOrderDetailID = 43659  %'
        AND CP.cacheobjtype = 'Compiled Plan'
GO



8、 你会发现里面没有数据,现在再次执行下面语句: 


USE AdventureWorks
GO
SELECT  *
FROM    Sales.SalesOrderDetail
WHERE   SalesOrderDetailID = 43659
GO


9、 使用以下查询检查: 


SELECT  CP.usecounts AS CountOfQueryExecution ,
        CP.cacheobjtype AS CacheObjectType ,
        CP.objtype AS ObjectType ,
        ST.text AS QueryText
FROM    sys.dm_exec_cached_plans AS CP
        CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS ST
WHERE   CP.usecounts > 0
        AND ST.text LIKE '%SELECT  *  FROM    Sales.SalesOrderDetail  WHERE   SalesOrderDetailID = 43659  %'
        AND CP.cacheobjtype = 'Compiled Plan'
GO



10、这次就出现了下面的截图: 

 第十七章配置SQLServer(3)配置“对即时负载的优化”

 

分析:

        当新查询执行时,query_hash值会在内存中生成,而不是整个执行计划,当相同的查询第二次执行的时候,SQLServer会查找是否已经存在这个query_hash,如果不存在,执行计划将保存在缓存中。这样就使得仅执行一次的查询将不会保存执行计划到缓存中。所以强烈建议打开这个配置。这个配置不造成任何负面影响,但是可以节省计划缓存的空间。

        一般情况下,当你执行查询,将会产生执行计划并保存在过程缓存中,所以当你执行步骤1的查询是,会看到服务器有很多计划缓存,但是当执行第六步后的查询是,就发现没有。对于即席查询,如果只执行一次,何必需要缓存呢?

        有些系统的计划缓存达到GB以上,开启后可能减少一半空间。另外,如果你好奇即席查询占用了多少空间,可以使用下面的语句:

SELECT  SUM(size_in_bytes) AS TotalByteConsumedByAdHoc
FROM    sys.dm_exec_cached_plans
WHERE   objtype = 'Adhoc'
        AND usecounts = 1


Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
如何在Nginx配置Cookie安全策略如何在Nginx配置Cookie安全策略Jun 10, 2023 pm 12:54 PM

随着互联网的不断发展和普及,Web应用程序已成为人们日常生活中必不可少的一部分,这也决定了Web应用程序的安全问题非常重要。在Web应用程序中,Cookie被广泛使用来实现用户身份认证等功能,然而Cookie也存在着安全风险,因此在配置Nginx时,必须设定适当的Cookie安全策略,以保证Cookie的安全性。下面是一些在Nginx中配置Cookie安全策

使用CMake构建Linux内核的配置指南使用CMake构建Linux内核的配置指南Jul 06, 2023 pm 02:46 PM

使用CMake构建Linux内核的配置指南概述在Linux开发中,构建和配置内核是一个重要的环节。对于大多数人来说,使用Kconfig和Makefile是最常见的配置方式。然而,使用CMake来构建和配置Linux内核也是一个灵活且强大的选择。本文将介绍如何使用CMake来构建和配置Linux内核,并附上一些代码示例。安装CMake首先,我们需要安装CMak

MySQL连接池的最大连接数如何设置?MySQL连接池的最大连接数如何设置?Jun 30, 2023 pm 12:55 PM

如何配置MySQL连接池的最大连接数?MySQL是一个开源的关系型数据库管理系统,被广泛应用于各种领域的数据存储与管理。在使用MySQL时,我们常常需要使用连接池来管理数据库连接,以提高性能和资源利用率。连接池是一种维护和管理数据库连接的技术,它能够在需要时提供数据库连接,并在不需要时回收连接,从而减少了连接的重复创建和销毁。而连接池的最大连接数则是连接池所

使用GDB调试Linux内核的常用配置技巧使用GDB调试Linux内核的常用配置技巧Jul 05, 2023 pm 01:54 PM

使用GDB调试Linux内核的常用配置技巧引言:在Linux开发中,使用GDB调试内核是一项非常重要的技能。GDB是一款功能强大的调试工具,可以帮助开发者快速定位和解决内核中的bug。本文将介绍一些常用的GDB配置技巧,以及如何使用GDB调试Linux内核。一、配置GDB环境首先,我们需要在Linux系统上配置GDB的环境。请确保你的系统已经安装了GDB工具

Nginx错误页面配置,优雅处理网站故障Nginx错误页面配置,优雅处理网站故障Jul 04, 2023 pm 04:06 PM

Nginx错误页面配置,优雅处理网站故障在现代互联网时代,一个高度稳定和可靠的网站是任何企业或个人追求的目标。然而,由于各种原因,网站可能会经历故障或错误,这可能是由于网络问题、服务器问题或应用程序错误等。为了提供更好的用户体验和优雅地处理任何可能发生的错误,Nginx作为一个强大的Web服务器软件,不仅能够提供高性能的服务,还能够灵活地配置错误页面。在Ng

如何使用Linux进行虚拟网络配置如何使用Linux进行虚拟网络配置Jun 18, 2023 am 11:24 AM

随着云计算、大数据和物联网等技术的日益普及,虚拟化技术成为了当今IT领域的热门话题。虚拟化是通过将一台物理主机划分为多个独立的虚拟机,实现资源的共享和管理的方法。虚拟网络是虚拟化的其中一个重要组成部分,能够满足不同应用之间的网络隔离和互动需求。在本文中,我们将介绍如何使用Linux进行虚拟网络配置。一、Linux虚拟网络的概述在物理网络中,网卡是连接网络设备

如何通过宝塔面板进行UFW防火墙的配置如何通过宝塔面板进行UFW防火墙的配置Jun 21, 2023 am 09:08 AM

在Linux服务器上配置防火墙非常重要,它可以有效地保护服务器免受恶意攻击。在Ubuntu操作系统上,我们可以使用UFW防火墙来保护服务器的安全。在本文中,我们将介绍如何使用宝塔面板配置UFW防火墙。第一步:安装宝塔面板首先,我们需要在Ubuntu上安装宝塔面板。您可以在宝塔官网免费下载宝塔面板的安装包,然后在命令行中运行以下命令来安装宝塔面板:$wget

Intel TXT的安装和配置步骤Intel TXT的安装和配置步骤Jun 11, 2023 pm 06:49 PM

IntelTXT(TrustedExecutionTechnology,可信执行技术)是一种硬件帮助保护系统安全的技术。它通过使用硬件测量模块(TPM)来确保系统启动过程中的完整性,并且可以防止恶意软件攻击。在本文中,我们将讨论IntelTXT的安装和配置步骤,帮助你更好地保护你的系统安全。第一步:检查硬件要求安装IntelTXT前,需要先检查计算

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

Hot Tools

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.