大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
当系统本身有内存可以用的的时候,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 2000
declare @tb table(row int identity(1,1),故障总成件 varchar(100),数量 int,占比 float)
insert into @tb select * from tb
select 故障总成件,数量,占比,累计百分比=(select sum(占比) from @tb t2 where t2.row=t1.row) from @tb t1
--sql 2005
with tc as(
select row=row_number()over(order by getdate()),* from tb
),
cte as(
select *,累计百分比=cast(占比 as decimal(28,3)) from tc where row=1 union all
select t.row,t.故障总成件,t.数量,t.占比,cast(c.累计百分比+t.占比 as decimal(28,3)) from tc t join cte c on t.row=c.row+1
)
select * from cte
sqlserver写法
创建表
create table test
(id int,
name varchar(1))
insert into test values (1,'a')
insert into test values (2,'a')
insert into test values (1,'a')
insert into test values (1,'a')
insert into test values (2,'a')
执行
select a.id,a.count1,(a.count1+0.0)/b.count2
from
(select id,count(*) count1 from test group by id) a,
(select count(*) count2 from test) b
标准答案:
declare @ACount int
select @ACount=count(*) from 表 --计算总数,避免放在大数据的select中影响效率
if @ACount0 --判断是否有记录,无记录时@Acount为0,不能做除数
select 表.name,cast(count(*) as numeric(10,3))/cast(@ACount as numeric(10,3)) from 表 group by 表.name --做百分比时要避免直接用/,会整除的,就无法判断%比例了。
else
select '表中无记录,无法统计比例'
--小数点后保留三位,换算成%比,应该如12.5%的精确度,numeric(10,3)前面的10如果长度不够可以根据需要修改
没有任何额外的进程下占用不到200M但哪个是你刚安装系统的情况下.要是时间长了 多了几个插件多了几个进程的话 就会多占一点,但最多也就200M左右.哪个只是任务管理器里的数字.但每个系统都有虚拟内存,要是你的内存是 512的话就把虚拟内存调到 1500M就可以了.256的话减少一点.