กระบวนการ“ TASK MANAGER” กำลังเข้ายึดฐานข้อมูลโหมดผู้ใช้คนเดียว มันคืออะไร?


13

นี่เป็นคำถามที่ซ้ำกันที่ฉันถามในstackoverflowแต่ฉันได้รับคำแนะนำว่าคนที่นี่อาจมีความคิดที่ดีขึ้นว่าเกิดอะไรขึ้น

ฉันมีปัญหาเป็นระยะ ๆ เมื่ออัพเกรด SQL Server ในโหมดผู้ใช้คนเดียวโดยใช้. NET SqlConnection แอปพลิเคชั่นอื่น ๆ บางอย่างจะล็อกเข้าสู่ฐานข้อมูลในขณะที่กำลังประมวลผลโค้ด SQL และเริ่มกระบวนการของฉัน SqlConnection จะไม่ถูกปิดหรือกำจัด แต่อย่างใด แต่แอปพลิเคชั่นอื่นบางตัวเชื่อมต่อกับฐานข้อมูลและทำให้การเชื่อมต่อของฉันหยุดชะงัก

เมื่อฉันรัน sp_who ฉันจะเห็นว่ากระบวนการที่ควบคุมฐานข้อมูลคือ Command = "TASK MANAGER"

ทุกคนสามารถบอกฉันได้ว่ากระบวนการนี้มีจุดประสงค์อะไรและในโลกจะเข้าสู่ฐานข้อมูลได้อย่างไรซึ่งอยู่ในโหมดผู้ใช้คนเดียวและมีการเชื่อมต่อที่ใช้งานอยู่?


คุณปิดตัวแทน SQL ในระหว่างกระบวนการนี้หรือไม่? งานที่ชื่อว่า "TASK MANAGER" (ที่มีหมายเลข spid ต่ำ) เป็นกระบวนการภายใน
Jon Seigel

@ JonSeigel ไม่ฉันไม่ได้ทำ คุณกำลังพูดว่า SQL Agent เป็นกระบวนการจริงที่ใช้งาน TASK MANAGER หรือไม่?
galets

ฉันไม่แน่ใจ 100% สิ่งที่ฉันรู้คือ SQL Agent เชื่อมต่อกับอินสแตนซ์เมื่อมันทำงานและสิ่งนี้สามารถป้องกันคุณจากการเข้าสู่ระบบในขณะที่เซิร์ฟเวอร์อยู่ในโหมดผู้ใช้คนเดียว ฉันมีปัญหานั้นเมื่อวานนี้และหยุดตัวแทน SQL แก้ไข
Jon Seigel

2
เพื่อให้ชัดเจนนี่ไม่ใช่ตัวจัดการงานเดียวกันกับที่คุณใช้ใน Windows เพื่อดูกระบวนการและประสิทธิภาพของระบบ
แอรอนเบอร์ทรานด์ด์

คำตอบ:


10

มีปัญหาเดียวกันในวันนี้หากคุณยังไม่ได้ใส่ AUTO_UPDATE_STATISTICS ASYNC OFF คุณจะไม่สามารถป้อนฐานข้อมูลของคุณคุณสามารถแก้ไขได้ด้วยการทำให้ฐานข้อมูลออฟไลน์อยู่ สิ่งสำคัญที่ควรทราบคือคุณต้องตั้งค่าลำดับความสำคัญการหยุดชะงักของคุณให้สูงไม่เช่นนั้นคุณจะถูกปิดกั้นจากคำสั่ง ใช้คำสั่งต่อไปนี้เพื่อออกจากโหมดผู้ใช้ SINGLE

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET OFFLINE WITH ROLLBACK IMMEDIATE

ติดตามโดย

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET ONLINE WITH ROLLBACK IMMEDIATE

ติดตามโดย

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET MULTI_USER WITH ROLLBACK IMMEDIATE

3
ขอบคุณมากสำหรับสิ่งนี้ อย่างไรก็ตามฉันพบว่าไม่จำเป็นต้องใช้ขั้นตอนออฟไลน์ / ออนไลน์ SET MULTIUSER WITH ROLLBACK IMMEDIATEทำงานได้ด้วยตัวเองเมื่อSET DEADLOCK_PRIORITY HIGHได้ทำครั้งแรก
รอสส์ Presser

6

ฉันคิดว่าความลึกลับได้รับการแก้ไขในที่สุด :

ก่อนที่คุณจะตั้งค่าฐานข้อมูลเป็น SINGLE_USER ให้ตรวจสอบตัวเลือก AUTO_UPDATE_STATISTICS_ASYNC ว่าตั้งไว้ที่ OFF เมื่อตั้งค่าเป็น ON เธรดพื้นหลังที่ใช้เพื่ออัปเดตสถิติจะทำการเชื่อมต่อกับฐานข้อมูลและคุณจะไม่สามารถเข้าถึงฐานข้อมูลในโหมดผู้ใช้คนเดียว


6

หยุดการติดตามเหตุการณ์เพิ่มเติม "system_health" มันจะถูกระบุไว้ภายใต้

SQL Server Management Studio
-> [ServerName]
-> Management
-> Extended Events
-> Right-Click on 'System_health'
-> Hit Stop Session

เมื่อตัวบล็อกได้รับการแก้ไขแล้วให้รีสตาร์ทเซสชัน


แม้ว่าคำตอบอื่น ๆ จะอธิบายว่าทำไมสิ่งนี้ถึงเกิดขึ้น แต่สิ่งนี้จะอธิบายวิธีการแก้ไข
Boris Callens

ความละเอียดที่สมบูรณ์แบบสำหรับฉัน มันทำงานได้ตามที่คาดไว้
Im88

0

คุณต้องปิดการใช้งานตัวแทน SQL 'ก่อน' เริ่มโหมดใช้งานครั้งเดียว ในฐานะตัวแทนบัญชีจะคว้าเข้าถึงผู้ใช้คนเดียว โปรดจำไว้ว่าผู้ใช้คนเดียวไม่ใช่คุณเป็นผู้ใช้ / กระบวนการแรกที่เชื่อมต่อ

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