SQL Server 数据库还原进度查看
SQL Server 数据库还原进度查看
关键字:数据库,还原,进度,查看
文档说明:
本文档受某实际需求启发,某约500G大小数据库还原,由于对应服务器性能较差(内存仅4G且可用内存仅2.8G),数据库的还原一直停留在还原界面,只从数据库还原界面无法查看具体数据库还原进度。通过上网搜集整理,现总结本文档,因个人水平有限,部分知识点可能有缺失甚至错漏,敬请指正
场景描述:
正常进行SQL Server数据库备份还原,选择源设备等等……
点击确定开始数据库还原,可以看到左下角有进度:“正在执行(0%)”
但实际上该进度无实际效果,即使最终数据库完成备份还原,该进度仍然显示“正在执行(0%)”
进度查看:
以sa身份执行
sp_who2
可以查看当前连接情况,从其中找到Command=‘RESTORE DATABASE’,根据其SPID
执行,其中session_id即为上面SPID。
SELECT
session_id, request_id, start_time, status, command
, percent_complete, estimated_completion_time,wait_time, cpu_time, total_elapsed_time, scheduler_id
,sql_handle
--,statement_start_offset, statement_end_offset, plan_handle
, database_id, user_id --,connection_id
, blocking_session_id
, wait_type, last_wait_type, wait_resource, open_transaction_count, open_resultset_count, transaction_id
--, context_info
--, task_address
, reads, writes, logical_reads
--, text_size, language, date_format, date_first, quoted_identifier, arithabort, ansi_null_dflt_on, ansi_defaults, ansi_warnings, ansi_padding, ansi_nulls, concat_null_yields_null, transaction_isolation_level, lock_timeout, deadlock_priority, row_count, prev_error, nest_level, granted_query_memory, executing_managed_code, group_id, query_hash, query_plan_hash
FROM sys.dm_exec_requests WHERE session_id=56
也可以使用如下语句,语句执行时注意按照实际情况选择将对应where条件取消注释
SELECT DB_NAME(er.[database_id]) [DatabaseName]
,er.[command] AS [CommandType]
,CONVERT(DECIMAL(5, 2), er.[percent_complete]) AS [Complete_Percent]
,er.start_time
,CONVERT(DECIMAL(38, 2), er.[total_elapsed_time] / 60000.00) AS [ElapsedTime_m]
,CONVERT(DECIMAL(38, 2), er.[estimated_completion_time] / 60000.00) AS [EstimatedCompletionTime_m]
,CONVERT(DECIMAL(38, 2), (er.[total_elapsed_time] / 60000.00 * ((100-er.[percent_complete])/er.percent_complete))) AS [EstimatedCompletionTime_m2]
FROM sys.dm_exec_requests AS er
WHERE 1=1
--and DB_NAME(er.[database_id]) in ('')
and er.[percent_complete] >0
--and er.[command] in ('RESTORE DATABASE' ,'BACKUP DATABASE','BACKUP LOG','RESTORE LOG')
order by er.start_time desc
可以从中看到percent_complete,对应数据库还原进度。一般来说当该值变为100时,意味着数据库还原会很快完成。但某现场使用个人PC作为SQL服务器,其内存总4G,可用内存2.8G,数据库备份大小约250G,数据库数据文件大小约300G,数据库日志大小约200G,数据库还原总耗时约19个小时。
其中percent_complete为100后仍等待了较长时间(超过4个小时),可以查看到其中等待类型:BACKUPTHREAD
参考网址:
http://itknowledgeexchange.techtarget.com/sql-server/what-is-the-backupthread-wait-type/
http://www.sqlserver-dba.com/2014/03/troubleshooting-backupthread-wait-type.html
等待类型:PAGELATCH_SH
参考网址:
http://www.tiejiang.org/2514.html
等待类型:SOS_SCHEDULER_YIELD
参考网址
http://www.itpub.net/thread-1853501-1-1.html
以上几个等待类型基本上是因为PC性能(主要是内存)有限,导致大量的类似等待,同样较低的电脑性能也整体影响了数据库的还原速度。
图形化界面不显示进度的替代解决方案
使用SQL语句。在使用图形化界面还原数据库时,所有设置完成后,点击“脚本”,选择将其生成到新查询窗口。
注意其中关键在于“STATS”选项
这样执行结果就可以在消息中看到进程,简单易用
**
**
补充:
1、 SQL Server 数据库备份和还原认识和总结(二)
参考网址:http://www.cnblogs.com/PongorXi/archive/2012/08/05/2623522.html
2、 特别推荐:浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架
参考网址:http://www.cnblogs.com/CareySon/archive/2012/02/13/2349751.html