设为首页收藏本站
查看: 7468|回复: 0

[后端开发] 系统常用sql查询2

[复制链接]
  • TA的每日心情
    奋斗
    2022-8-5 08:00
  • 签到天数: 265 天

    [LV.8]以坛为家I

    发表于 2021-11-23 22:39:09 | 显示全部楼层 |阅读模式
    1. 1. sqlserver查看实例级别的信息,使用SERVERPROPERTY函数

    2. select SERVERPROPERTY ('propertyname')

    3. 2. 查看实例级别的某个参数XX的配置

    4. select * from sys.configurations where name='XX'

    5. 3. 更改实例级别的某个参数XX的值

    6. sp_configure 'XX','0'
    7. RECONFIGURE WITH OVERRIDE
    8. sp_configure显示或更改当前服务器的全局配置设置。
    9. RECONFIGURE表示SQL Server不用重新启动就立即生效 。

    10. 使用sp_configure更改设置时,请使用RECONFIGURE语句使更改立即生效,否则更改将在SQL Server重新启动后生效。RECONFIGURE后面加WITH OVERRIDE表示不管这个值是不是符合要求都会生效,比如recovery interval的范围值是10--60对应sys.configurations.minimum是10、sys.configurations.maximum是60,如果sp_configure 'recovery interval', 75设置为75,超过了这个10--60规范,但是要让75生效,则必须加上WITH OVERRIDE。

    11. 4. sqlserver没有系统表可以查询所有数据库下面对象,以下只能在当前数据库下面查

    12. select * from sys.all_objects --查询当前数据库的所有架构范围的对象
    13. select * from sys.sysobjects --查询当前数据库的所有对象
    14. --sys.all_objects、sys.sysobjects 这种的视图,在每个数据库的系统视图下面都有

    15. select * from sys.databases --在当前数据库下可以查询到所有数据库信息,包含是否on状态
    16. select * from sys.sysdatabases --在当前数据库下可以查询到所有数据库信息,不包含是否on状态,这个系统视图会在后续的版本中删除
    17. --sys.databases、sys.sysdatabases这种的视图,在每个数据库的系统视图下面都有
    18. sys.processes --没有这个视图
    19. select * from sys.sysprocesses --在当前数据库下可以查询所有正在SQL Server 实例上运行的进程的相关信息,也就是所有数据库上的线程,这个系统视图会在后续的版本中删除

    20. 5. 全局系统视图、单个数据库系统视图

    21. sys.database_files --每个存储在数据库本身中的数据库文件在表中占用一行。这是一个基于每个数据库的视图。
    22. sys.master_files --master 数据库中的每个文件对应一行。这是一个系统范围视图。
    23. --sys.database_files、sys.master_files这种的视图,在每个数据库的系统视图下面都有

    24. 6. 一些只存在msdb的系统表,而非系统视图

    25. dbo.backupset
    26. dbo.log_shipping_secondary
    27. dbo.restorehistory
    28. dbo.sysjobs
    29. dbo.sysjobhistory
    30. --这些系统表只存在msdb数据库,使用的时候必须加上msdb前缀

    31. 7. sp_lock、sp_who、sp_who2、sp_helptext等一些系统存储过程存在于每个数据库中

    32. 8. sp_lock 报告有关锁的信息,会显示实例里面的所有数据库的锁信息、堵塞信息

    33. 9. 提供有关当前用户、 会话和进程的实例中的信息,可以看到会话的状态running、SUSPENDED、sleeping、rollback,sp_who2通过CPUTime、DiskIO可以判断对应的transaction是否很大

    34. sp_who
    35. sp_who2
    36. sp_who2 active (可选参数LoginName, 或active代表活动会话数)
    37. CPUTime (进程占用的总CPU时间)
    38. DiskIO (进程对磁盘读的总次数)
    39. LastBatch (客户最后一次调用存储过程或者执行查询的时间)
    40. ProgramName (用来初始化连接的应用程序名称,或者主机名)

    41. 10. 查看某个存储过程的内容

    42. sp_helptext pro_name

    43. 11.显示某个线程号发送到sqlserver数据库的最后一个语句


    44. DBCC INPUTBUFFER

    45. 12.假设查询到249被锁给堵塞了,查询被堵塞的SQL语句

    46. DBCC INPUTBUFFER (249)

    47. 13. 查看某个数据库中是否存在活动事务,有活动事务就一定会写日志

    48. DBCC OPENTRAN (dbname)

    49. 14. 监视日志空间

    50. DBCC SQLPERF (LOGSPACE)

    51. 15. 查找无法重用日志中的空间的原因(日志无法截断导致日志文件越来越大,但是可用空间很小,无法收缩)

    52. select name,log_reuse_wait_desc from sys.databases

    53. 16. 查看虚拟日志文件信息

    54. DBCC LOGINFO
    55. 结果有多少行,代表有多少虚拟日志文件,活动的虚拟日志文件的状态(status)为2

    56. 17. 修复msdb数据库,比如ssms页面sql server agent丢失或看不了job view history等功能,说明msdb坏了,需要修复

    57. dbcc checkdb (msdb);

    58. 18. 在您当前连接到的 SQL Server 数据库中生成一个手动检查点

    59. CHECKPOINT [ checkpoint_duration ]
    60. --checkpoint_duration表示以秒为单位指定手动检查点完成所需的时间,一般不使用这个参数,让数据库自己控制

    61. 19. 查看数据库各种设置

    62. select name,State,user_access,is_read_only,recovery_model from sys.databases

    63. 20. 查看某个数据库中是否存在会话

    64. select DB_NAME(dbid),* from sys.sysprocesses where dbid=db_id('dbname')

    65. 21. 查询当前阻塞的所有请求

    66. select * from sys.sysprocesses where blocked>0

    67. SELECT t1.resource_type,db_name(t1.resource_database_id),t1.resource_associated_entity_id,t1.request_mode,
    68. t1.request_session_id,t2.blocking_session_id,t2.wait_duration_ms
    69. FROM sys.dm_tran_locks as t1
    70. INNER JOIN sys.dm_os_waiting_tasks as t2
    71. ON t1.lock_owner_address = t2.resource_address;

    72. select A.SPID as 被阻塞进程,a.CMD AS 正在执行的操作,b.spid AS 阻塞进程号,b.cmd AS 阻塞进程正在执行的操作
    73. from master..sysprocesses a,master..sysprocesses b
    74. where a.blocked<>0 and a.blocked= b.spid

    75. SELECT session_Id,spid,ecid,DB_NAME (sp.dbid),nt_username,er.status,wait_type,
    76. [Individual Query] =SUBSTRING (qt.text,er.statement_start_offset / 2,
    77. ( CASE
    78. WHEN er.statement_end_offset = -1
    79. THEN
    80. LEN (CONVERT (NVARCHAR (MAX), qt.text)) * 2
    81. ELSE
    82. er.statement_end_offset
    83. END
    84. - er.statement_start_offset)
    85. / 2),
    86. qt.text,program_name,Hostname,nt_domain,start_time
    87. FROM sys.dm_exec_requests er
    88. INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid
    89. CROSS APPLY sys.dm_exec_sql_text (er.sql_handle) AS qt
    90. WHERE session_Id > 50 /* Ignore system spids.*/
    91. AND sp.blocked>0 AND session_Id NOT IN (@@SPID)

    92. SELECT session_id ,status ,blocking_session_id
    93. ,wait_type ,wait_time ,wait_resource
    94. ,transaction_id
    95. FROM sys.dm_exec_requests
    96. WHERE status = N'suspended';
    97. --sys.dm_exec_requests返回SQL Server 中正在执行的每个请求的信息

    98. 22. 查看哪些表被锁了,以及这些表被哪个进程锁了

    99. select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
    100. from sys.dm_tran_locks where resource_type='OBJECT' ORDER BY request_session_id ASC

    101. 23. 查询某个job是否被堵塞

    102. select * from msdb.dbo.sysjobs where name='jobname'
    103. select a.program_name,a.* from master..sysprocesses a where a.program_name like '%0D1CE57E8AC5%'
    104. --把第一个语句查询到的job_id代入第二个语句的program_name

    105. 24. 检查SQL Agent是否开启

    106. IF EXISTS (
    107. SELECT TOP 1 1
    108. FROM sys.sysprocesses
    109. WHERE program_name = 'SQLAgent - Generic Refresher'
    110. )
    111. SELECT 'Running'
    112. ELSE
    113. SELECT 'Not Running'

    114. 25. 查看活动线程执行的sql语句,并生成批量杀掉的语句

    115. select 'KILL '+CAST(a.spid AS NVARCHAR(100)) AS KillCmd,REPLACE(hostname,' ','') as hostname ,replace(program_name,' ','') as program_name
    116. ,REPLACE(loginame, ' ', '') AS loginame, db_name(a.dbid) AS DBname,spid,blocked,waittime/1000 as waittime
    117. ,a.status,Replace(b.text,'''','''') as sqlmessage,cpu
    118. from sys.sysprocesses as a with(nolock)
    119. cross apply sys.dm_exec_sql_text(sql_handle) as b
    120. where a.status<>'sleeping' AND a.spid<>@@SPID

    121. 26. 查看备份进度

    122. SELECT DB_NAME(database_id) AS Exec_DB
    123. ,percent_complete
    124. ,CASE WHEN estimated_completion_time < 36000000
    125. THEN '0' ELSE '' END + RTRIM(estimated_completion_time/1000/3600)
    126. + ':' + RIGHT('0' + RTRIM((estimated_completion_time/1000)%3600/60), 2)
    127. + ':' + RIGHT('0' + RTRIM((estimated_completion_time/1000)%60), 2) AS [Time Remaining]
    128. ,b.text as tsql
    129. ,*
    130. FROM SYS.DM_EXEC_REQUESTS
    131. cross apply sys.dm_exec_sql_text(sql_handle) as b
    132. WHERE command LIKE 'Backup%' --and database_id=db_id('cardorder')
    133. --OR command LIKE 'RESTORE%'
    134. ORDER BY 2 DESC

    135. 27. 查看恢复进度

    136. SELECT DB_NAME(database_id) AS Exec_DB
    137. ,percent_complete
    138. ,CASE WHEN estimated_completion_time < 36000000
    139. THEN '0' ELSE '' END + RTRIM(estimated_completion_time/1000/3600)
    140. + ':' + RIGHT('0' + RTRIM((estimated_completion_time/1000)%3600/60), 2)
    141. + ':' + RIGHT('0' + RTRIM((estimated_completion_time/1000)%60), 2) AS [Time Remaining]
    142. ,b.text as tsql
    143. ,*
    144. FROM SYS.DM_EXEC_REQUESTS
    145. cross apply sys.dm_exec_sql_text(sql_handle) as b

    146. WHERE command LIKE 'RESTORE%' --and database_id=db_id('cardorder')
    147. --OR command LIKE 'RESTORE%'
    148. ORDER BY 2 DESC

    149. SQLSERVER查看备份、还原进度
    150. SELECT
    151. DB_NAME(er.[database_id]) [DatabaseName]
    152. ,er.[command] AS [CommandType]
    153. ,er.start_time
    154. ,er.[percent_complete]
    155. ,CONVERT(DECIMAL(38, 2), er.[total_elapsed_time] / 60000.00) AS [ElapsedTime_second]
    156. ,CONVERT(DECIMAL(38, 2), er.[estimated_completion_time] / 60000.00) AS [EstimatedCompletionTime_second]
    157. FROM sys.dm_exec_requests AS er
    158. WHERE er.[command] in ( 'RESTORE DATABASE' ,'BACKUP DATABASE')
    159. order by er.start_time desc

    160. 28. 查看数据库的最近备份信息

    161. SELECT database_name,type,MAX(backup_finish_date) AS backup_finish_date FROM msdb.dbo.backupset GROUP BY database_name,type ORDER BY database_name,type
    162. 备注:D 表示全备份,i 表示差异备份,L 表示日志备份

    163. 29. 查看数据库的历史备份记录,并生成restore语句

    164. SELECT
    165. CONVERT(CHAR(100),SERVERPROPERTY('Servername'))AS Server,
    166. bs.database_name,
    167. bs.backup_start_date,
    168. bs.backup_finish_date,
    169. bs.expiration_date,
    170. CASE bs.type
    171. WHEN 'D' THEN 'Database'
    172. WHEN 'L' THEN 'Log'
    173. END AS backup_type,
    174. bs.backup_size,
    175. bmf.logical_device_name,
    176. bmf.physical_device_name,
    177. bs.name AS backupset_name,
    178. bs.description,
    179. 'RESTORE DATABASE ['+bs.database_name+'] FROM DISK=N'''
    180. +bmf.physical_device_name+ '''WITH NORECOVERY;'
    181. FROM msdb.dbo.backupmediafamily bmf
    182. INNER JOIN msdb.dbo.backupset bs
    183. ON bmf.media_set_id=bs.media_set_id
    184. WHERE bs.backup_start_date>DATEADD(DAY,-1,GETDATE())
    185. ORDER BY bs.backup_finish_date

    186. 30. 查询XX库从YYYY-MM-DD日期开始的日志备份记录,并生成restore log的语句

    187. SELECT TOP 1000
    188. S.database_name [Database],
    189. CASE [S].[type]
    190.         WHEN 'L'
    191.         THEN N'RESTORE LOG ' + QUOTENAME(S.database_name) + N' FROM DISK = ''' + F.physical_device_name + N''' WITH NORECOVERY;'
    192. END [LogRestore],
    193. F.physical_device_name,
    194. S.[Type],
    195. S.backup_start_date,
    196. S.backup_finish_date
    197. FROM msdb.dbo.backupmediafamily F
    198. INNER JOIN msdb.dbo.backupset S
    199. ON S.media_set_id = F.media_set_id
    200. WHERE S.database_name = 'XX' AND
    201. S.type = 'L' AND S.backup_start_date > 'YYYY-MM-DD' ORDER BY S.backup_start_date ASC

    202. 31. 查询always on状态是否正常

    203. select dc.database_name, d.synchronization_health_desc, d.synchronization_state_desc, d.database_state_desc from sys.dm_hadr_database_replica_states d join sys.availability_databases_cluster dc on d.group_database_id=dc.group_database_id and d.is_local=1

    204. 32. 查看mirror镜像信息

    205. SELECT
    206. db_name(database_id),
    207. mirroring_state_desc,
    208. mirroring_role_desc,
    209. mirroring_partner_name,
    210. mirroring_partner_instance

    211. FROM sys.database_mirroring

    212. 33. 查询SSRS Report Subscriptions相关的job

    213. SELECT

    214. b.name AS JobName
    215. , e.name
    216. , e.path
    217. , d.description
    218. , a.SubscriptionID
    219. , laststatus
    220. , eventtype
    221. , LastRunTime
    222. , date_created
    223. , date_modified
    224. FROM
    225. ReportServer.dbo.ReportSchedule a
    226. JOIN msdb.dbo.sysjobs b ON CONVERT(SYSNAME,a.ScheduleID) = b.name
    227. JOIN ReportServer.dbo.ReportSchedule c ON b.name = CONVERT(SYSNAME,c.ScheduleID)
    228. JOIN ReportServer.dbo.Subscriptions d ON c.SubscriptionID = d.SubscriptionID
    229. JOIN ReportServer.dbo.Catalog e ON d.report_oid = e.itemid
    230. WHERE
    231. e.name = 'Report Name Goes Here'

    232. 34. 查看某个数据库的数据文件信息,就算是mirror从库的数据文件也可以查到,filestream目录也可以查到

    233. SELECT db_name(database_id),* FROM master.sys.master_files WHERE database_id =DB_ID(N'DBA');

    234. 35. 查看某个数据文件信息

    235. select b.name,a.type_desc,a.name,a.physical_name,a.size,a.max_size,a.is_percent_growth,a.growth from sys.master_files a join sys.databases b on a.database_id=b.database_id and a.physical_name like '%DTSWonda_1%'

    236. 36. 查询实例的数据文件总大小

    237. SELECT sum(size*8/1024/1024) FROM master.sys.master_files

    238. 37. 查询某个目录中数据库使用的总大小

    239. SELECT a.size*8/1024/1024 ,a.* FROM master.sys.master_files a WHERE physical_name like 'G:\DEFAULT.DATA%'

    240. 38. 查询某个目录中哪些数据库占用了8G以上容量

    241. SELECT b.name dbname,a.size*8/1024/1024 sum_GB,a.type_desc,a.name datafilename,a.physical_name FROM master.sys.master_files a join sys.sysdatabases b on a.database_id=b.dbid and a.physical_name like 'G:\DEFAULT.DATA%' and a.size*8/1024/1024>8

    242. 39. 查询实例上的每个数据库的大小

    243. SELECT
    244. DB_NAME(db.database_id) DatabaseName,
    245. (CAST(mfrows.RowSize AS FLOAT)*8)/1024 RowSizeMB,
    246. (CAST(mflog.LogSize AS FLOAT)*8)/1024 LogSizeMB,

    247. (CAST(mfstream.StreamSize AS FLOAT)*8)/1024 StreamSizeMB,
    248. (CAST(mftext.TextIndexSize AS FLOAT)*8)/1024 TextIndexSizeMB
    249. FROM sys.databases db
    250. LEFT JOIN (SELECT database_id, SUM(size) RowSize FROM sys.master_files WHERE type = 0 GROUP BY database_id, type) mfrows ON mfrows.database_id = db.database_id

    251. LEFT JOIN (SELECT database_id, SUM(size) LogSize FROM sys.master_files WHERE type = 1 GROUP BY database_id, type) mflog ON mflog.database_id = db.database_id

    252. LEFT JOIN (SELECT database_id, SUM(size) StreamSize FROM sys.master_files WHERE type = 2 GROUP BY database_id, type) mfstream ON mfstream.database_id = db.database_id
    253. LEFT JOIN (SELECT database_id, SUM(size) TextIndexSize FROM sys.master_files WHERE type = 4 GROUP BY database_id, type) mftext ON mftext.database_id = db.database_id

    254. 40. 查询总耗CPU最多的前3个SQL,且最近5天出现过

    255. SELECT TOP 3
    256. total_worker_time/1000 AS [总消耗CPU 时间(ms)],execution_count [运行次数],
    257. qs.total_worker_time/qs.execution_count/1000 AS [平均消耗CPU 时间(ms)],
    258. last_execution_time AS [最后一次执行时间],max_worker_time /1000 AS [最大执行时间(ms)],
    259. SUBSTRING(qt.text,qs.statement_start_offset/2+1,
    260. (CASE WHEN qs.statement_end_offset = -1
    261. THEN DATALENGTH(qt.text)
    262. ELSE qs.statement_end_offset END -qs.statement_start_offset)/2 + 1)
    263. AS [使用CPU的语法], qt.text [完整语法],
    264. qt.dbid, dbname=db_name(qt.dbid),
    265. qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName
    266. FROM sys.dm_exec_query_stats qs WITH(nolock)
    267. CROSS apply sys.dm_exec_sql_text(qs.sql_handle) AS qt
    268. WHERE execution_count>1 and last_execution_time>dateadd(dd,-5,getdate())
    269. ORDER BY total_worker_time DESC

    270. 41. 查询平均耗CPU最多的前3个SQL,且最近5小时出现过

    271. SELECT TOP 3
    272. total_worker_time/1000 AS [总消耗CPU 时间(ms)],execution_count [运行次数],
    273. qs.total_worker_time/qs.execution_count/1000 AS [平均消耗CPU 时间(ms)],
    274. last_execution_time AS [最后一次执行时间],min_worker_time /1000 AS [最小执行时间(ms)],
    275. max_worker_time /1000 AS [最大执行时间(ms)],
    276. SUBSTRING(qt.text,qs.statement_start_offset/2+1,
    277. (CASE WHEN qs.statement_end_offset = -1
    278. THEN DATALENGTH(qt.text)

    279. ELSE qs.statement_end_offset END -qs.statement_start_offset)/2 + 1)
    280. AS [使用CPU的语法], qt.text [完整语法],
    281. qt.dbid, dbname=db_name(qt.dbid),
    282. qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName
    283. FROM sys.dm_exec_query_stats qs WITH(nolock)
    284. CROSS apply sys.dm_exec_sql_text(qs.sql_handle) AS qt
    285. WHERE execution_count>1 and last_execution_time>dateadd(hh,-5,getdate())

    286. ORDER BY (qs.total_worker_time/qs.execution_count/1000) DESC

    287. 42. 查看当前最耗资源的10个SQL及其spid

    288. SELECT TOP 10
    289. session_id,request_id,start_time AS '开始时间',status AS '状态',

    290. command AS '命令',d_sql.text AS 'sql语句', DB_NAME(database_id) AS '数据库名',
    291. blocking_session_id AS '正在阻塞其他会话的会话ID',
    292. wait_type AS '等待资源类型',wait_time AS '等待时间',wait_resource AS '等待的资源',
    293. reads AS '物理读次数',writes AS '写次数',logical_reads AS '逻辑读次数',
    294. row_count AS '返回结果行数'
    295. FROM sys.dm_exec_requests AS d_request
    296. CROSS APPLY
    297. sys.dm_exec_sql_text(d_request.sql_handle) AS d_sql
    298. WHERE session_id>50
    299. ORDER BY cpu_time DESC
    300. --前50号session_id一般是系统后台进程,sys.dm_exec_requests的status显示为background

    301. 43. 查询某个存储过程被哪些job调用了

    302. SELECT *
    303. FROM msdb.dbo.sysjobs JOB WITH( NOLOCK)
    304. INNER JOIN msdb. dbo.sysjobsteps STP WITH(NOLOCK )
    305. ON STP .job_id = JOB .job_id
    306. WHERE STP .command LIKE N'%sp_name%'
    307. --以上要查询某个job被哪个job调用了,把sp_name存储过程名字改成job_name作业名字即可

    308. 44. 命令执行某个job

    309. EXECUTE msdb.dbo.sp_start_job N'job_name'

    310. 45. 查询某表标识列的列名

    311. SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='表名' AND COLUMNPROPERTY(OBJECT_ID('表名'),COLUMN_NAME,'IsIdentity')=1

    312. 46. 获取标识列的种子值

    313. SELECT IDENT_SEED ('表名')

    314. 47. 获取标识列的递增量

    315. SELECT IDENT_INCR('表名')

    316. 48. 获取指定表中最后生成的标识值

    317. SELECT IDENT_CURRENT('表名')

    318. 49. 重新设置标识种子值为XX

    319. DBCC CHECKIDENT (表名, RESEED, XX)

    320. 50. 升级前,查询服务器名、实例名、版本号

    321. select SERVERPROPERTY('machinename'),@@SERVERNAME,SERVERPROPERTY ('edition'),@@version

    322. 51. 用户被grant这样操作赋予的权限

    323. use dbname
    324. exec sp_helprotect @username = 'username'

    325. 52. 授予某个用户执行某个数据库的sp的权限

    326. use dbname
    327. grant execute to "username"

    328. 53. always on

    329. -查看集群各节点的信息,包含节点成员的名称,类型,状态,拥有的投票仲裁数

    330. SELECT * FROM  sys.dm_hadr_cluster_members;
    331. -查看集群各节点的信息,包含节点成员的名称,节点成员上的sql实例名称

    332. select * from sys.dm_hadr_instance_node_map
    333. -查看WSFC(windows server故障转移群集)的信息,包含集群名称,仲裁类型,仲裁状态

    334. SELECT * FROM SYS.dm_hadr_cluster;
    335. -查看AG名称

    336. select * from sys.dm_hadr_name_id_map
    337. -查看集群各节点的子网信息,包含节点成员的名称,子网段,子网掩码

    338. SELECT * FROM  sys.dm_hadr_cluster_networks;
    339. -查看侦听ip

    340. select * from sys.availability_group_listeners;
    341. -查看主从各节点的状态

    342. select d.is_local,dc.database_name, d.synchronization_health_desc,

    343. d.synchronization_state_desc, d.database_state_desc
    344. from sys.dm_hadr_database_replica_states d
    345. join sys.availability_databases_cluster dc

    346. on d.group_database_id=dc.group_database_id;
    347. -查看辅助副本(传说中的从库)延迟多少M日志量

    348. select db_name(database_id),log_send_queue_size/1024 delay_M,*
    349. from sys.dm_hadr_database_replica_states where is_primary_replica=0;

    350. select ar.replica_server_name, db_name(drs.database_id),drs.truncation_lsn,
    351. drs.log_send_queue_size, drs.redo_queue_size
    352. from sys.dm_hadr_database_replica_states drs
    353. join sys.availability_replicas ar on drs.replica_id=ar.replica_id where drs.is_local=0;

    354. select ar.replica_server_name, db_name(drs.database_id),drs.truncation_lsn,
    355. drs.log_send_queue_size,drs.log_send_rate, drs.redo_queue_size,drs.redo_rate
    356. from sys.dm_hadr_database_replica_states drs
    357. join sys.availability_replicas ar on drs.replica_id=ar.replica_id where drs.is_local=0
    358. --log_send_queue_size 主数据库中尚未发送到辅助数据库的日志记录量 (KB)
    359. --log_send_rate 在最后一个活动期间,以千字节 (KB) 的平均主副本发送实例数据的速率/秒
    360. --redo_queue_size 在最后一个活动期间,以千字节 (KB) 的平均主副本发送实例数据的速率/秒
    361. --redo_rate 平均千字节 (KB) 中的给定辅助数据库做的日志记录速率 / 秒

    362. 54. 查询实例的FILESTREAM 使用的DIRECTORY_NAME

    363. SELECT  SERVERPROPERTY('FilestreamShareName')

    364. 55. 查询FILETABLE表的数据库对应的DIRECTORY_NAME

    365. select db_name(database_id),* from sys.database_filestream_options
    366. 仅仅使用filestream功能时,数据库不需要对应的DIRECTORY_NAME

    367. 56. 查询FILETABLE表对应的DIRECTORY_NAME

    368. select object_name(object_id),* from sys.filetables

    369. 57. 查询filetable表testdb.dbo.table1中的文件完整路径名称

    370. SELECT FileTableRootPath()+[file_stream].GetFileNamespacePath(),name FROM testdb.dbo.table1

    371. 58. 查询所有job的状态是否running

    372. SELECT sj.Name,
    373. CASE

    374. WHEN sja.start_execution_date IS NULL THEN 'Not running'
    375.         WHEN sja.start_execution_date IS NOT NULL AND sja.stop_execution_date IS NULL THEN 'Running'
    376.         WHEN sja.start_execution_date IS NOT NULL AND sja.stop_execution_date IS NOT NULL THEN 'Not running'
    377. END AS 'RunStatus'
    378. FROM msdb.dbo.sysjobs sj
    379. JOIN msdb.dbo.sysjobactivity sja
    380. ON sj.job_id = sja.job_id
    381. WHERE session_id = (

    382. SELECT MAX(session_id) FROM msdb.dbo.sysjobactivity) order by RunStatus desc;

    383. 59. 锁表的四种用法

    384. TABLOCKX
    385. SELECT * FROM table WITH (TABLOCKX)
    386. 查询过程中,其他会话无法查询、更新此表,直到查询过程结束

    387. TABLOCK

    388. SELECT * FROM table WITH (TABLOCK)
    389. 查询过程中,其他会话可以查询,但是无法更新此表,直到查询过程结束

    390. HOLDLOCK
    391. SELECT * FROM table WITH (HOLDLOCK)
    392. 查询过程中,其他会话可以查询,但是无法更新此表,直到查询过程结束

    393. NOLOCK
    394. SELECT * FROM table WITH (NOLOCK)
    395. 查询过程中,其他会话可以查询、更新此表

    396. 60. 查询某个发布XX,发布的数据库对象的2种方法

    397. 发布数据库上执行(数据来源这三张表distribution.dbo.MSpublications、distribution.dbo.MSarticles、sysarticlecolumns)

    398. select a.article,a.source_object,a.destination_object,b.colid from
    399. (select article,article_id,source_object,destination_object
    400. from [distribution].[dbo].MSarticles where publication_id in
    401. ( select publication_id from
    402. [distribution].[dbo].MSpublications where publication='XX'
    403. )
    404. ) a
    405. inner join
    406. (select * from replicate1.dbo.sysarticlecolumns) b
    407. on a.article_id=b.artid order by a.article
    408. 订阅数据库上执行

    409. select distinct article  from MSreplication_objects where publication='XX'

    410. 61. 查询发布信息,发布名称,发布名称对应的发布序号

    411. Select * from distribution.dbo.MSpublications

    412. 62. 查询发布名里面的发布对象的信息,包含表、视图、存储过程等

    413. Select * from  distribution.dbo.MSarticles

    414. 63. 监控发布订阅是否有异常,执行以下5条语句即可

    415. select * from [distribution].[dbo].[MSlogreader_history] WHERE error_id != 0 AND [time] >= DATEADD(HOUR, -1, GETDATE())
    416. select * from [distribution].[dbo].[MSdistribution_history] WHERE error_id != 0 AND [time] >= DATEADD(HOUR, -1, GETDATE())
    417. select * from [distribution].[dbo].[MSsnapshot_history] WHERE error_id != 0 AND [time] >= DATEADD(HOUR, -1, GETDATE())
    418. select * from [distribution].[dbo].MSrepl_errors order by 2 desc

    419. select * from msdb.dbo.sysreplicationalerts order by 7 desc

    420. 64. 查询XX表的索引信息

    421. SELECT a.name index_name,c.name table_name,d.name column_name
    422. FROM sysindexes a JOIN sysindexkeys b
    423. ON a.id=b.id AND a.indid=b.indid
    424. JOIN sysobjects c
    425. ON b.id=c.id
    426. JOIN syscolumns d
    427. ON b.id=d.id= AND b.colid=d.colid
    428. WHERE a.indid NOT IN(0,255) AND c.name in ('XX')

    429. 65. 生成sql语句的执行计划(select XXX为例,当然select XXX也可以换成执行存储过程比如exec pro_XXX,都是只生成执行计划,不产生结果集,不会执行存储过程)

    430. SET SHOWPLAN_ALL ON;
    431. GO
    432. select XXX
    433. GO
    434. SET SHOWPLAN_ALL OFF;
    435. GO

    436. SET SHOWPLAN_XML ON;
    437. GO
    438. select XXX
    439. GO
    440. SET SHOWPLAN_XML OFF;
    441. GO

    442. 66. 查询名称为XXX的job的最后一次运行成功的时间

    443. SELECT TOP 1 CONVERT(DATETIME, RTRIM(run_date))+ ((run_time / 10000 * 3600) + ((run_time % 10000) / 100 * 60) + (run_time % 10000) % 100) / (86399.9964)
    444. FROM msdb.dbo.sysjobhistory jobhis inner join msdb.dbo.sysjobs  jobs
    445. on jobhis.job_id = jobs.job_id AND jobhis.step_id = 0 AND jobhis.run_status = 1
    446. and jobs.name='XXX'
    447. ORDER BY 1 DESC

    448. 67. 查询某张分区表的总行数和大小,比如表为crm.EmailLog

    449. exec sp_spaceused 'crm.EmailLog';

    450. 68. 查询某张分区表的信息,每个分区有多少行,比如表为crm.EmailLog

    451. select convert(varchar(50), ps.name
    452. ) as partition_scheme,
    453. p.partition_number,
    454. convert(varchar(10), ds2.name
    455. ) as filegroup,
    456. convert(varchar(19), isnull(v.value, ''), 120) as range_boundary,
    457. str(p.rows, 9) as rows
    458. from sys.indexes i
    459. join sys.partition_schemes ps on i.data_space_id = ps.data_space_id
    460. join sys.destination_data_spaces dds
    461. on ps.data_space_id = dds.partition_scheme_id
    462. join sys.data_spaces ds2 on dds.data_space_id = ds2.data_space_id
    463. join sys.partitions p on dds.destination_id = p.partition_number
    464. and p.object_id = i.object_id and p.index_id = i.index_id
    465. join sys.partition_functions pf on ps.function_id = pf.function_id
    466. LEFT JOIN sys.Partition_Range_values v on pf.function_id = v.function_id
    467. and v.boundary_id = p.partition_number - pf.boundary_value_on_right
    468. WHERE i.object_id = object_id('crm.EmailLog')
    469. and i.index_id in (0, 1)
    470. order by p.partition_number

    471. 69. 查询分区函数

    472. select * from sys.partition_functions

    473. 70. 查看分区架构

    474. select * from sys.partition_schemes

    475. 71. 查询ssis包的信息

    476. select * from msdb.dbo.sysssispackages

    477. 72. 查询某张表里的索引的大小,如下示例表为dbo.table1

    478. SELECT
    479. i.name              AS IndexName,
    480. SUM(page_count * 8) AS IndexSizeKB
    481. FROM sys.dm_db_index_physical_stats(
    482. db_id(), object_id('dbo.table1'), NULL, NULL, 'DETAILED') AS s
    483. JOIN sys.indexes AS i

    484. ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
    485. GROUP BY i.name
    486. ORDER BY i.name

    487. 73. 重建表上的所有索引

    488. alter index all on table_name rebuild with (online=on)
    489. 重建表上的某个索引

    490. alter index index_name on table_name rebuild with (online=on)
    491. 重新组织表上的所有索引

    492. alter index all on table_name reorganize
    493. 重新组织表上的某个索引

    494. alter index index_name on table_name reorganize

    495. 74. 查看数据文件可收缩空间,结果见Availabesize_MB字段值

    496. select name ,size*8/1024 as Totalsize_MB ,CAST(FILEPROPERTY(name,'SpaceUsed') AS int)*8/1024 as Usedsize_MB,
    497. size*8/1024 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)*8/1024 AS Availabesize_MB
    498. from sys.master_files where database_id=db_id(N'DBNAME')

    499. 75. 查询某个表中的全部索引的信息

    500. declare @tableName varchar(50) = 'LbaListAlertDetail'
    501. declare @tableId int

    502. select @tableId = object_id
    503. from sys.objects
    504. where name = @tableName

    505. SELECT OBJECT_NAME(IX.OBJECT_ID) Table_Name
    506. ,IX.name AS Index_Name
    507. ,IX.type_desc Index_Type
    508. ,SUM(PS.[used_page_count]) * 8 IndexSizeKB
    509. ,IXUS.user_seeks AS NumOfSeeks
    510. ,IXUS.user_scans AS NumOfScans
    511. ,IXUS.user_lookups AS NumOfLookups
    512. ,IXUS.user_updates AS NumOfUpdates
    513. ,IXUS.last_user_seek AS LastSeek
    514. ,IXUS.last_user_scan AS LastScan
    515. ,IXUS.last_user_lookup AS LastLookup
    516. ,IXUS.last_user_update AS LastUpdate
    517. FROM sys.indexes IX
    518. INNER JOIN sys.dm_db_index_usage_stats IXUS ON IXUS.index_id = IX.index_id AND IXUS.OBJECT_ID = IX.OBJECT_ID
    519. INNER JOIN sys.dm_db_partition_stats PS on PS.object_id=IX.object_id
    520. WHERE OBJECTPROPERTY(IX.OBJECT_ID,'IsUserTable') = 1
    521. and IX.OBJECT_ID = @tableId
    522. GROUP BY OBJECT_NAME(IX.OBJECT_ID) ,IX.name ,IX.type_desc ,IXUS.user_seeks ,IXUS.user_scans ,IXUS.user_lookups,IXUS.user_updates ,IXUS.last_user_seek ,IXUS.last_user_scan ,IXUS.last_user_lookup ,IXUS.last_user_update
    523. sqlserver中类似oracle的dba_source的视图是sys.sql_modules

    524. 76. 查询某个数据库下的表数据占用磁盘容量最大的10张表

    525. use XX
    526. if exists(select 1 from tempdb..sysobjects where id=object_id('tempdb..#tabName') and xtype='u')
    527. drop table #tabName
    528. go

    529. create table #tabName(
    530. table_name varchar(100),
    531. rowsNum varchar(100),
    532. reserved_size varchar(100),
    533. data_size varchar(100),
    534. index_size varchar(100),
    535. unused_size varchar(100)
    536. )
    537. declare @name varchar(100)
    538. declare cur cursor for
    539. select name from sysobjects where xtype='u' order by name
    540. open cur
    541. fetch next from cur into @name
    542. while @@fetch_status=0
    543. begin
    544. insert into #tabName
    545. exec sp_spaceused @name

    546. fetch next from cur into @name
    547. end
    548. close cur
    549. deallocate cur

    550. select top 10 table_name, data_size,rowsNum ,index_size,unused_size ,reserved_size,convert(int,SUBSTRING(data_size,0,LEN(data_size)-2)) size
    551. from #tabName ORDER BY size desc



    552. select top 10 a.tablename,a.SCHEMANAME,sum(a.TotalSpaceMB) TotalSpaceMB,sum(a.RowCounts) RowCounts
    553. from (
    554. SELECT
    555. t.NAME AS TableName,
    556. s.Name AS SchemaName,
    557. p.rows AS RowCounts,
    558. SUM(a.total_pages) * 8 AS TotalSpaceKB,
    559. CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
    560. SUM(a.used_pages) * 8 AS UsedSpaceKB,
    561. CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB,
    562. (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
    563. CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
    564. FROM
    565. sys.tables t
    566. INNER JOIN
    567. sys.indexes i ON t.OBJECT_ID = i.object_id
    568. INNER JOIN
    569. sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
    570. INNER JOIN
    571. sys.allocation_units a ON p.partition_id = a.container_id
    572. LEFT OUTER JOIN
    573. sys.schemas s ON t.schema_id = s.schema_id
    574. WHERE
    575. t.NAME NOT LIKE 'dt%'
    576. AND t.is_ms_shipped = 0
    577. AND i.OBJECT_ID > 255
    578. GROUP BY
    579. t.Name, s.Name, p.Rows) a
    580. GROUP BY  a.tablename,a.SCHEMANAME
    581. order by sum(a.TotalSpaceMB) desc
    582. --这个比上一个专业

    583. 77. 查询某个数据库中是否有create index '+name+ CHAR(10)

    584. select 'use '+name+ CHAR(10) +'select DB_NAME(),OBJECT_NAME(OBJECT_ID),definition from '+name+'.sys.sql_modules

    585. WHERE objectproperty(OBJECT_ID, ''IsProcedure'') = 1
    586. AND definition like ''%online%=%on%'' and definition like ''%index%''' from sys.databases;

    587. 78. 根据id号查询某个数据库名

    588. SELECT DB_NAME(18)
    589. 根据id号查询某个对象名

    590. SELECT OBJECT_NAME(1769220894)

    591. 79. 查看收缩的进度100%,此语句要到指定的数据库下执行

    592. SELECT DB_NAME(database_id) AS Exec_DB
    593. ,percent_complete
    594. ,CASE WHEN estimated_completion_time < 36000000
    595. THEN '0' ELSE '' END + RTRIM(estimated_completion_time/1000/3600)
    596. + ':' + RIGHT('0' + RTRIM((estimated_completion_time/1000)%3600/60), 2)

    597. + ':' + RIGHT('0' + RTRIM((estimated_completion_time/1000)%60), 2) AS [Time Remaining]
    598. ,b.text as tsql
    599. ,*
    600. FROM SYS.DM_EXEC_REQUESTS
    601. cross apply sys.dm_exec_sql_text(sql_handle) as b
    602. WHERE command LIKE 'DbccFilesCompact%' --and database_id=db_id('cardorder')
    603. ORDER BY 2 DESC

    604. 80. 查看重新组织索引的100%进度

    605. SELECT DB_NAME(database_id) AS Exec_DB
    606. ,percent_complete
    607. ,CASE WHEN estimated_completion_time < 36000000
    608. THEN '0' ELSE '' END + RTRIM(estimated_completion_time/1000/3600)
    609. + ':' + RIGHT('0' + RTRIM((estimated_completion_time/1000)%3600/60), 2)
    610. + ':' + RIGHT('0' + RTRIM((estimated_completion_time/1000)%60), 2) AS [Time Remaining]
    611. ,b.text as tsql
    612. ,*
    613. FROM SYS.DM_EXEC_REQUESTS
    614. cross apply sys.dm_exec_sql_text(sql_handle) as b
    615. WHERE command LIKE '%REORGANIZE%' --and database_id=db_id('cardorder')
    616. ORDER BY 2 DESC

    617. 81. 查看存储过程的执行计划

    618. SELECT
    619.         d.object_id ,
    620.         DB_NAME(d.database_id) DBName ,
    621.         OBJECT_NAME(object_id, database_id) 'SPName' ,
    622.         d.cached_time ,
    623.         d.last_execution_time ,
    624.         d.total_elapsed_time/1000000    AS total_elapsed_time,
    625.         d.total_elapsed_time / d.execution_count/1000000
    626.         AS [avg_elapsed_time] ,
    627.         d.last_elapsed_time/1000000     AS last_elapsed_time,
    628.         d.execution_count ,
    629.         d.total_physical_reads ,
    630.         d.last_physical_reads ,
    631.         d.total_logical_writes ,
    632.         d.last_logical_reads ,
    633.         et.text SQLText ,
    634.         eqp.query_plan executionplan

    635. FROM    sys.dm_exec_procedure_stats AS d
    636. CROSS APPLY sys.dm_exec_sql_text(d.sql_handle) et

    637. CROSS APPLY sys.dm_exec_query_plan(d.plan_handle) eqp
    638. WHERE   OBJECT_NAME(object_id, database_id) = 'xxxx'
    639. ORDER BY [total_worker_time] DESC;

    640. 82. 查看当前用户

    641. select system_user

    642. 83. 查询ddl修改操作的记录

    643. -执行如下找到trace文件的目录和名称

    644. select * from Sys.traces
    645. -使用sqlserver profiler工具打开trace文件,就可以查到相关记录

    646. 查看下实例名,网络名
    647. SELECT @@SERVERNAME as InstalledName, SERVERPROPERTY('SERVERNAME') as NetworkName
    复制代码
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    红盟社区--红客联盟 

    Processed in 0.063590 second(s), 21 queries.

    站点统计| 举报| Archiver| 手机版| 黑屋 |   

    备案号:冀ICP备20006029号-1 Powered by HUC © 2001-2021 Comsenz Inc.

    手机扫我进入移动触屏客户端

    关注我们可获取更多热点资讯

    Honor accompaniments. theme macfee

    快速回复 返回顶部 返回列表