月度归档:2019年08月

mssql sqlserver sum如何使用if进行按条件汇总呢?


摘要:
下文讲述sum if按条件汇总数据的方法分享
实验环境:sql server 2008 R2


在一些汇总计算,我们常常会遇见,一些数值满足一定的条件时,我们才进行计算求和,反之则放弃此数据
下文通过举例的方式,讲述sum if 求和统计,如下:

  create table [maomao365.com]
(keyid int identity,
  qty int
  )
  go
  
  ----基础数据生成
  insert into [maomao365.com](qty)
  values(5),(1),(89),(1),(12),
  (10),(15),(16),(17),(15),(7)
  go
  
  ---sum if变相实现方法
  select sum(
   case 
    when qty >5 then qty 
   else 0
   end
  )   as [大于5求和]
  from [maomao365.com]
  
  
  go
  truncate table [maomao365.com]
  drop     table [maomao365.com]

mssql sqlserver 如何限制tempdb数据库的大小呢?


摘要:
下文讲述限制tempdb数据库大小的方法,具体实现步骤如下所示:
实验环境:sql server 2008 R2



tempdb数据库是sqlserver中的一个系统数据库。
tempdb数据库在sqlserver引擎中,起着非常重要的作用,可以毫不夸张的说:“没有tempdb数据库,sqlserver无法正常运行”。
tempdb在sql运行中,用于存放一些临时对象。

在一些大型查询中,会大量占用tempdb数据库缓存数据,由于tempdb数据库同用户数据库一样,是一个数据库,那么tempdb中缓存数据增大时,tempdb会大量占用硬盘空间。
tempdb数据库如果暴涨,如果占满磁盘后,会影响系统性能,下文我们将采用一种折衷的办法,限制tempdb数据库的大小,具体实现方法如下所示:

一、在数据库tempdb上点击”右键”–>选择属性


二、选择”文件”

mssql_sqlserver_文件属性设置_9421

mssql_sqlserver_文件属性设置_9421


mssql_sqlserver_文件属性设置_9421_2

mssql_sqlserver_文件属性设置_9421_2



三、点击按钮,限制“文件大小”



设置完成后,tempdb大小就可以得到实际的控制。

mssql sqlserver tempdb暴涨了,如何查询出暴涨所对应的sql脚本呢?


摘要:
sqlserver中tempdb暴涨了,常见的原因是查询未做优化,下文将讲述获取未优化的sql脚本的方法分享,如下所示:
实验环境:sql server 2008 R2


具体的查询步骤如下所示:

   
use tempdb  
go  

----检索出占用空间最大的sessioId 
SELECT top 50 t1.session_id,                                                      
t1.internal_objects_alloc_page_count,  t1.user_objects_alloc_page_count,  
t1.internal_objects_dealloc_page_count , t1.user_objects_dealloc_page_count,  
t3.login_name,t3.status,t3.total_elapsed_time  
from sys.dm_db_session_space_usage  t1   
inner join sys.dm_exec_sessions as t3   
on t1.session_id = t3.session_id   
where (t1.internal_objects_alloc_page_count>0   
or t1.user_objects_alloc_page_count >0  
or t1.internal_objects_dealloc_page_count>0   
or t1.user_objects_dealloc_page_count>0)  
order by t1.internal_objects_alloc_page_count desc  


---2.将第一个步骤中查询出的SessionId放入 替换下面的sessionId值,
---得到未优化的脚本信息,然后针对性优化处理

select s.text,p.*
from master.dbo.sysprocesses p   
cross apply sys.dm_exec_sql_text(p.sql_handle) s  
where spid = sessionId  ---第一步骤中的sessionId替换此处的sessionId值