*******************sp_who, sp_who2和sp_who3*********************
sp_who3是某牛人自定义的存储过程,(可选参数spid),显示“非系统会话,且是活动的会话”的详细情况。
CREATE PROCEDURE sp_who3
( @SessionID int = NULL )
AS
BEGIN
SELECT
SPID = er.session_id
,Status = ses.status
,[Login] = ses.login_name
,Host = ses.host_name
,BlkBy = er.blocking_session_id
,DBName = DB_Name(er.database_id)
,CommandType = er.command
,SQLStatement = st.text
,ObjectName = OBJECT_NAME(st.objectid)
,ElapsedMS = er.total_elapsed_time
,CPUTime = er.cpu_time
,IOReads = er.logical_reads + er.reads
,IOWrites = er.writes
,LastWaitType = er.last_wait_type
,StartTime = er.start_time
,Protocol = con.net_transport
,ConnectionWrites = con.num_writes
,ConnectionReads = con.num_reads
,ClientAddress = con.client_net_address
,Authentication = con.auth_scheme
FROM sys.dm_exec_requests er
OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) st
LEFT JOIN sys.dm_exec_sessions ses
ON ses.session_id = er.session_id
LEFT JOIN sys.dm_exec_connections con
ON con.session_id = ses.session_id
WHERE er.session_id > 50
AND @SessionID IS NULL OR er.session_id = @SessionID
ORDER BY
er.blocking_session_id DESC
,er.session_id
END
go
***************************索引缺失*************************
use *******--要查看的数据库所提供的索引使用情况
SELECT DISTINCT db_name(database_id) as N'数据库名称',
object_name(a.object_id) as N'表名称',
b.name N'索引名称',
user_seeks N'用户索引查找次数',
user_scans N'用户索引扫描次数',
last_user_seek N'最后查找时间',
last_user_scan N'最后扫描时间',
rows as N'表中的行数'
from sys.dm_db_index_usage_stats a join
sys.indexes b
on a.index_id = b.index_id
and a.object_id = b.object_id
join sysindexes c
on c.id = b.object_id
where database_id=db_id('SFCGaeaSPK') ---改成要查看的数据库
and object_name(a.object_id) not like 'sys%'
order by rows DESC,user_seeks,user_scans,object_name(a.object_id)
--查询提供缺失索引的数据库、架构和表的名称。它还提供应该用于索引键的列的名称
USE ******
GO
SELECT migs.group_handle, mid.*
FROM sys.dm_db_missing_index_group_stats AS migs
INNER JOIN sys.dm_db_missing_index_groups AS mig
ON (migs.group_handle = mig.index_group_handle)
INNER JOIN sys.dm_db_missing_index_details AS mid
ON (mig.index_handle = mid.index_handle)
WHERE migs.group_handle = 2
--要查询索引缺失的数据库
USE ******
GO
SELECT * FROM sys.[dm_db_missing_index_details]
SELECT * FROM sys.[dm_db_missing_index_groups]
SELECT * FROM sys.[dm_db_missing_index_group_stats]
SELECT * FROM sys.[dm_db_missing_index_columns](1) --1 :1是根据dm_db_missing_index_details查出来的
查询锁
select request_session_id ,OBJECT_NAME(resource_associated_entity_id)tableName ,program_name,sp.hostname,a.[Text]AS[TextData]
from sys.dm_tran_locks,sys.sysprocessesASspOUTERAPPLY sys.dm_exec_sql_text(sp.sql_handle)ASA
where resource_type='OBJECT'
AND request_session_id=spid
*********************阻塞查询**************************
1.整体阻塞情况,阻塞时间超过1000毫秒
select T.session_id AS waiting_session_id,
DB_NAME(L.resource_database_id) AS DatabaseName,
T.wait_duration_ms/60000 AS Duration_in_minutes,
T.waiting_task_address,
L.request_mode,
L.resource_type,
L.resource_associated_entity_id,
L.resource_description AS lock_resource_description,
T.wait_type,
T.blocking_session_id,
T.resource_description AS blocking_resource_desctiption
from sys.dm_os_waiting_tasks AS T
join sys.dm_tran_locks AS L on T.resource_address=L.lock_owner_address
where T.wait_duration_ms>1000
and T.session_id>50;
2.阻塞语句,阻塞时间超过1000毫秒
select T.session_id as waiting_session_id,
DB_NAME(L.resource_database_id) AS DatabaseName,
T.wait_duration_ms/60000 AS duration_in_minutes,
T.waiting_task_address,
L.request_mode,
(select substring(Q.text,(R.statement_start_offset/2)+1,
((CASE R.statement_end_offset
when -1 then datalength(Q.text)
else R.statement_end_offset
END -R.statement_start_offset)/2)+1)
from sys.dm_exec_requests AS R
CROSS APPLY sys.dm_exec_sql_text(R.sql_handle) AS Q
where R.session_id=L.request_session_id
)AS waiting_query_text,
L.resource_type,
L.resource_associated_entity_id,
T.wait_type,
T.blocking_session_id,
T.resource_description AS blocking_resource_description,
CASE when T.blocking_session_id>0
then (select ST2.text
from sys.sysprocesses AS P
cross APPLY
sys.dm_exec_sql_text(P.sql_handle) AS ST2
where P.spid=T.blocking_session_id)
ELSE NULL
END AS blocking_query_text
FROM sys.dm_os_waiting_tasks AS T
join sys.dm_tran_locks AS L on T.resource_address=L.lock_owner_address
where T.wait_duration_ms>1000
and T.session_id>50;
****************常用***************
1、select DB_ID('')
2、修改列名
exec sp_rename ‘Table.OldName’,'NewName','column';
3、添加自增长列
alter table T add ID bigint Identity(1,1)