วิธีการตรวจสอบความคืบหน้าของ DBCC SHRINKFILE?


31

มีวิธีการค้นหาความคืบหน้าของDBCC SHRINKFILEคำสั่งหรือไม่

นี่คือวิธีที่ฉันใช้มัน

dbcc shrinkfile ('main_data', 250000)

ฉันใช้คำสั่งข้างต้นทั้ง SQL Server 2005 และ 2008

[อัพเดท] นี่คือคำถามที่ฉันวิ่งไปตรวจสอบความคืบหน้าและข้อความที่กำลังทำงานอยู่

select  T.text, R.Status, R.Command, DatabaseName = db_name(R.database_id)
        , R.cpu_time, R.total_elapsed_time, R.percent_complete
from    sys.dm_exec_requests R
        cross apply sys.dm_exec_sql_text(R.sql_handle) T

คำตอบ:


33

คุณได้ตรวจสอบเปอร์เซนต์สมบูรณ์ใน sys.dm_exec_requests หรือไม่?


กำลังตรวจสอบวิธีอ่านข้อมูลที่ส่งคืนจาก DMV นั้น
dance2die

14

คำตอบของแอรอนเป็นจุดบน แต่ฉันอยากจะเตือนคุณกับการเรียกใช้ไฟล์ข้อมูลหดตัวเพราะมันทำให้เกิดปัญหาประสิทธิภาพการทำงานที่น่ากลัว ฉันเคยเป็นเจ้าของรหัสย่อดังนั้นฉันรู้ว่าฉันกำลังพูดถึงอะไร ชำระเงินที่โพสต์บล็อกนี้ฉันเขียนเมื่อวานนี้ที่แสดงให้คุณเห็นสิ่งที่ฉันหมายถึงและให้คำแนะนำวิธีการทำให้หดตัวโดยไม่หดตัวจริง: ทำไมคุณไม่ควรลดขนาดไฟล์ข้อมูลของคุณ

หวังว่านี่จะช่วยได้!

ป.ล. อีกสิ่งหนึ่งที่ต้องตรวจสอบว่าใช้เวลานานหรือไม่และเปอร์เซ็นต์ _complete ไม่เพิ่มขึ้น - มองหาการบล็อก การย่อขนาดจะไม่สิ้นสุด - รอการล็อคตามที่ต้องการ


4
"ฉันเคยเป็นเจ้าของรหัสย่อดังนั้นฉันรู้ว่าฉันกำลังพูดถึงอะไร" ดี!
splattne

1
มันใช้เวลาตลอดไปในการลดขนาดไฟล์ข้อมูล 600G ... ฉันจะอ่านมันและพิจารณาใช้การจัดเรียงดัชนี ขอบคุณพอล!
dance2die

1
โปรดจำไว้ว่าฉันพบคำตอบนี้เพราะฉันกำลังมองหาความคืบหน้าของ DBCC SHRINKFILE (MyFile, EMPTYFILE) ... ฉันกำลังย้ายข้อมูลระหว่างไดรฟ์โดยเพิ่มไฟล์ไปยังกลุ่มไฟล์บนไดรฟ์ใหม่โดยล้างข้อมูลต้นฉบับและวางทิ้ง
Sam Saffron

@ พอลฉันกำลังสังเกตว่าการลดขนาดไฟล์เป็นขนาดเป้าหมายใช้เวลาสักครู่ แต่ก็เสร็จสมบูรณ์ (ฉันเห็นมันดูขนาดไฟล์) - แต่แม้ว่า SEEMS จะเสร็จสมบูรณ์กระบวนการของการกระพริบยังคงดำเนินต่อไปและทำงานตลอดไป เดียวกันกับปริมาณ shink ที่น้อยกว่า (บาง MBs หรือใหญ่กว่า (1 GB)) sys.dm_exec_requests แสดงกิจกรรมที่ไม่สิ้นสุดอย่างต่อเนื่องเปลี่ยนการล็อคทรัพยากรในขณะที่เปอร์เซ็นต์ _completion ติดอยู่ที่ประมาณ 32,8% ณ จุดนี้ฉันยกเลิกกระบวนการและเฉลิมฉลองความสำเร็จอย่างเป็นทางการโดยรู้ว่าสิ่งที่ยังคงเกิดขึ้น ... ความคิดใด ๆ ที่ผิดปกติ 2008r2
Magier

ลิงก์ไปยังบล็อกโพสต์ไม่ถูกต้องดูเหมือนว่าจะใช้ได้ในขณะนี้: sqlskills.com/blogs/paul/…
Jonathan Gilbert

5
SELECT 
    d.name,
    percent_complete, 
    session_id,
    start_time, 
    status, 
    command, 
    estimated_completion_time, 
    cpu_time, 
    total_elapsed_time
FROM 
    sys.dm_exec_requests E left join
    sys.databases D on e.database_id = d.database_id
WHERE
    command in ('DbccFilesCompact','DbccSpaceReclaim')

2
การมีคำอธิบายรหัสของคุณทำในคำตอบของคุณอาจเป็นประโยชน์
BE77Y

+1 สำหรับการสืบค้นที่ยอดเยี่ยม แต่ -1 สำหรับการทำซ้ำสิ่งที่ OP กล่าวหกปีหลังจากข้อเท็จจริง หากคำค้นหาของคุณดีกว่าคำค้นหาบางส่วนโปรดอธิบายให้ดีมิฉะนั้นจะเป็นการสิ้นเปลืองเนื้อที่

5

ข้อความค้นหาด้านล่างจะแสดงผลลัพธ์ดังนี้: ติดตามสถานะการหดตัว dbcc

-------------------------------
--Track DBCC shrink status
-------------------------------
select
a.session_id
, command
, b.text
, percent_complete
, done_in_minutes = a.estimated_completion_time / 1000 / 60
, min_in_progress = DATEDIFF(MI, a.start_time, DATEADD(ms, a.estimated_completion_time, GETDATE() ))
, a.start_time
, estimated_completion_time = DATEADD(ms, a.estimated_completion_time, GETDATE() )
from sys.dm_exec_requests a
CROSS APPLY sys.dm_exec_sql_text(a.sql_handle) b
where command like '%dbcc%'

3

การเพิ่มเวอร์ชั่นของฉันเองสำหรับทุกคนที่สนใจสิ่งนี้จะแปลงคอลัมน์เวลามิลลิวินาทีเป็นนาทีและวินาทีที่อ่านได้มากขึ้น

select 
[status],
start_time,
convert(varchar,(total_elapsed_time/(1000))/60) + 'M ' + convert(varchar,(total_elapsed_time/(1000))%60) + 'S' AS [Elapsed],
convert(varchar,(estimated_completion_time/(1000))/60) + 'M ' + convert(varchar,(estimated_completion_time/(1000))%60) + 'S' as [ETA],
command,
[sql_handle],
database_id,
connection_id,
blocking_session_id,
percent_complete
from  sys.dm_exec_requests
where estimated_completion_time > 1
order by total_elapsed_time desc


-1

sp_whoisactive - มีคอลัมน์ "percent_complete"


1
สิ่งนี้ไม่ได้ให้คำตอบสำหรับคำถาม เมื่อคุณมีเพียงพอชื่อเสียงคุณจะสามารถที่จะแสดงความคิดเห็นในโพสต์ใด ๆ ; แทนที่จะให้คำตอบที่ไม่จำเป็นต้องชี้แจงจากผู้ถาม - จากรีวิว
bjoster
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.