重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

sqlserver物理分,sql物理结构

如何解决SQLServer占内存过多的问题

当系统本身有内存可以用的的时候,SQL Server 根据操作系统报告的物理内存加载动态增大和收缩其缓冲池(缓存)的大小。只要有足够的内存可用于防止内存页面交换(在 4 至 10 MB 之间),SQL Server 缓冲池就会继续增大。如果你想把sql的内存控制在某个数量,可以更改配置信息,

成都创新互联服务项目包括王屋网站建设、王屋网站制作、王屋网页制作以及王屋网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,王屋网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到王屋省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

1.打开企业管理器,展开服务器组。

2.单击该服务器,点击鼠标右键,单击属性菜单。

3.在弹出的对话框中单击内存选项卡。

可以看到SQLServer将动态配置内存的最大值修改为物理内存的最大值了

解决 SQL Server 耗尽内存的情况

如果碰到SQL Server服务造成内存不断扩展最终系统死机等情况,请按照以下方法解决。

原理:SQL Server 2000引入的动态内存分配机制,一般不能很好的回收内存,如果计算机一直不关闭,就会发生内存耗尽的可能。可以选择每周关机一次来避免,或者是按照下述方法来抑制内存的增长。

1、在服务器上开始—Microsoft SQL Server—企业管理器 中启动SQL企业管理器

2、启动以后打开右边的控制台树:控制台根目录\Microsoft SQL server\Sql Server组\(Local) 。

3、在(Local)节点上单击鼠标右键,选择"属性"菜单,可以看到一个 SQl Server属性(配置) 窗体

4、选择"内存"舌标,打开内存配置页面。将内存的最大值限定在一定的范围内,一般按照以下比例:

a) 如果仅仅用于数据库服务器,为总内存的80-90%

b) 如果兼任域服务器,一般为60-70%

c) 如果还兼任WEB服务器,建议最大为60%

5、设定完毕点击确定,然后重新启动SQl Server服务使之生效即可。

解决服务器的w3wp.exe进程占用cpu和内存过多的问题

解决CPU占用过多:

1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。

2、设置应用程序池的CPU监视,不超过30%(一个程序池20个站),每分钟刷新,超过限制时关闭。

根据w3wp取得是哪一个应用程序池:

1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid

2、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池。(iisapp实际上是存放在C:\windows\system32目录下的一个VBS脚本,全名为iisapp.vbs,如果你和我一样,也禁止了Vbs默认关联程序,那么就需要手动到该目录,先择打开方式,然后选“Microsoft (r) Windows Based Script. Host”来执行,就可以得到PID与应用程序池的对应关系。)

3、到iis中察看该应用程序池对应的网站,就ok了,做出上面的内存或CPU方面的限制,或检查程序有无死循环之类的问题。

解决内存占用过多,可以做以下配置:

1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。

2、设置应用程序池的回收时间,去掉默认为1720,设置固定时间回收(在下列时间回收工作进程:00:01 06:01 12:01)。再设置当内存占用超过多少(如192M 10个站一个程序池时),就自动回收内存。

3、在性能中设置启用CPU监视

最大使用率 30%

刷新率 1分钟

操作:关闭

1、 要限制一个站点的CPU使用,必须将该站点设置为独立应用程序池,共用应用程序池是无法限制单个站点的。IIS独立应用程序池,就需要独立的进程,非常消耗内存。独立池越多,就有越多的W3WP进程。对于每个站点均要独立应用程序池的服务器,在一般的普通P43.0 2G内存 的普通服务器上,建议不要超过50个站点,最好30以内,不然服务器压力非常大。在配置上,我一般把资源消耗较大的网站独立一个池,一般普通BBS或者生成HTML的系统大概5个站一个池。普通网站以及一些企业站点均共用一个池。

2、根据wlmmc的经验,在服务器硬件允许的情况下,一般不要限制站点内存使用,这样能够保证网站运行,不会出现用户掉线情况。需要限制某站的最大虚拟内存不要小于64M,不然可能出现一些未知的错误。

3、这些都不是根本解决办法,它的根本问题是网站程序有问题,要解决根本问题还要从程序查起。根据本文开头提到的方法查到具体的应用程序池,找到使用此应用程序池的网站,解决网站程序存在的问题,如死循环之类。

4、除了w3wp.exe, 在调用数据库进行大量查询操作的时候,也会大量占用CPU资源,这是难免的(数据库方面的语句及结构优化不在本文讨论范围之内)。个人认为,只要不是CPU长时间占用100%, 一般在75%左右都是正常的。

请教关于Sql Server2008R2是如何对物理内存分配使用的

没什么好怕的, 如果你的使用量太大, sqlserver会占用所有内存, 这是正常现象。

你唯一需要注意的是:

1. SqlServer服务器的cpu高不高?(看任务管理器)

2. 慢的SQL有哪些?

下面的sql可以帮你, 应该直接在服务器上查询:

SQL code?

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].Proc_DBA_GetSlowSQL') AND type in (N'P', N'PC'))

DROP PROCEDURE [dbo].Proc_DBA_GetSlowSQL

GO

-- =============================================

-- Author: yenange

-- Create date: 2015-12-17

-- Description: 取得最近执行缓慢的SQL语句

-- =============================================

CREATE PROCEDURE dbo.Proc_DBA_GetSlowSQL

@topNum INT = 50 --取前多少条记录

,@lastExecutionTime DATETIME = NULL --最后执行时间, 默认为NULL. 为 NULL 则忽略此条件; 不为NULL 则取大于此参数之后执行的

,@excludeNight BIT=1 --是否 排除晚上的信息? 默认=1 排除。选择是=1,后面两参数才有意义

,@nightBegin CHAR(5)='22:00' --"晚上"开始时间点, 默认 22:00

,@nightEnd CHAR(5)='06:00' --"晚上"结束时间点, 默认 06:30

,@containSQL NVARCHAR(300)=NULL --语句中包含的SQL. 默认为NULL. 为NULL则忽略此条件; 不为NULL则取包含此参数的记录

AS

BEGIN

SET NOCOUNT ON

DECLARE @nightBegin_num INT

DECLARE @nightEnd_num INT

SET @nightBegin_num=CAST( replace(@nightBegin,':','') AS INT)

SET @nightEnd_num=CAST( replace(@nightEnd,':','') AS INT)

SET ROWCOUNT @topNum

SELECT

st.text AS SQL_Full --父级完整语句

,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,

((CASE statement_end_offset

WHEN -1 THEN DATALENGTH(st.text)

ELSE qs.statement_end_offset END

- qs.statement_start_offset)/2) + 1) as SQL_Part --统计对应的部分语句

, CAST( ((qs.total_elapsed_time / 1000000.0)/qs.execution_count) AS DECIMAL(28,2) ) AS [平均消耗秒数]

, CAST(qs.last_elapsed_time / 1000000.0 AS DECIMAL(28, 2)) AS [最后完成消耗秒数]

, qs.last_execution_time AS [最后执行时间]

, CAST(qs.min_elapsed_time / 1000000.0 AS DECIMAL(28, 2)) AS [最小消耗秒数]

, CAST(qs.max_elapsed_time / 1000000.0 AS DECIMAL(28, 2)) AS [最大消耗秒数]

, CAST(qs.total_elapsed_time / 1000000.0 AS DECIMAL(28, 2)) AS [总消耗秒数]

, (qs.execution_count) AS [总执行次数]

, creation_time AS [编译计划的时间]

, CAST(qs.last_worker_time / 1000000.0 AS DECIMAL(28, 2)) AS [最后完成占用CPU秒数]

, sql_handle,statement_start_offset,statement_end_offset

,plan_generation_num,plan_handle,creation_time

,last_execution_time,execution_count

,total_worker_time,last_worker_time,min_worker_time,max_worker_time

,total_physical_reads,last_physical_reads,min_physical_reads,max_physical_reads,total_logical_writes,last_logical_writes,min_logical_writes,max_logical_writes,total_logical_reads,last_logical_reads,min_logical_reads,max_logical_reads

,total_clr_time,last_clr_time,min_clr_time,max_clr_time

from sys.dm_exec_query_stats qs

CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st

WHERE

--1. 最后执行时间

(@lastExecutionTime IS NULL OR qs.last_execution_time=@lastExecutionTime)

--2. 包含 SQL 条件

AND

(@containSQL IS NULL OR st.[text] LIKE '%'+@containSQL+'%')

AND

--3. 是否排除晚上

(

@excludeNight=0

OR

(

--2.1 开始大于结束 22:00-6:30 [ x =6:30(end) and x22:00(begin) ]

@nightBegin_num@nightEnd_num AND

(

CAST( replace(CONVERT(varchar(5),last_execution_time,108),':','') AS INT)=@nightEnd_num

AND

CAST( replace(CONVERT(varchar(5),last_execution_time,108),':','') AS INT)@nightBegin_num

)

)

OR

(

--2.2 开始小于结束 1:00-6:30 [ x=0:00 and x1:00 or x=6:30 and x24:00 ]

@nightBegin_num@nightEnd_num AND

(

(

CAST( replace(CONVERT(varchar(5),last_execution_time,108),':','') AS INT)=0

AND

CAST( replace(CONVERT(varchar(5),last_execution_time,108),':','') AS INT)@nightBegin_num

)

OR

(

CAST( replace(CONVERT(varchar(5),last_execution_time,108),':','') AS INT)=@nightEnd_num

AND

CAST( replace(CONVERT(varchar(5),last_execution_time,108),':','') AS INT)2400

)

)

)

)

ORDER BY qs.last_elapsed_time DESC

SET NOCOUNT OFF

SET ROWCOUNT 0

END

GO

EXEC sys.sp_addextendedproperty

@name=N'Version', @value=N'1.1' ,

@level0type=N'SCHEMA',@level0name=N'dbo',

@level1type=N'PROCEDURE',@level1name=N'Proc_DBA_GetSlowSQL'

sqlserver数据库分离后物理目录中只有若干个ndf文件和一个ldf文件,没有mdf文件,请问这是为什么?

在数据库管理(ssms)中,右击你的数据库,在属性中查看数据文件存放位置。看一看到底有没有mdf.

不论是mdf,ndf,ldf,这些扩展名都是可以自定义的。

若是真的缺少一个mdf文件,还没有备份的话,就得考虑从磁盘恢复mdf文件了(用第三方软件或找专业恢复人员)。


分享名称:sqlserver物理分,sql物理结构
分享链接:http://cqcxhl.com/article/dseoshi.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP