באג #: 187868 (תחזוקת תוכן)VSTS: 1340145
Microsoft מפיץ תיקונים Microsoft SQL Server 2012 להורדה בקובץ אחד. מאחר התיקונים הם מצטברים, כל פרסום חדש כולל את כל התיקונים החמים ואת פרסומו של עדכון כל עדכוני האבטחה שהיו כלולים בפרסום 2012 הקודם של שרת SQL.
מאפייני הבעיה
שקול את התרחיש הבא:
-
יצירת שגרה מאוחסנת משתמש בפרמטר טבלה מוערכת (TVP) ב- Microsoft SQL Server 2012.
-
השתמש SQL Profiler או אירועי מורחב של שרת SQL כדי ללכוד RPC: החל ו- RPC: הושלמה אירועים.
-
הפעלת שאילתה המשתמשת את TVP.
-
השאילתה הזמן שהוקצב.
בתרחיש זה, מתרחשת שגיאת מתזמן-עצירת תצליח, ולהפעיל שאילתות הפועלות על מתזמן אותו באיטיות. בנוסף, נוצר קובץ dump המצומצמת בתיקיה יומן רישום של SQL Server.
כאשר בעיה זו מתרחשת, תקבל הודעת שגיאה הדומה להודעה הבאה:
System.Data.SqlClient.SqlException (0x80131904): תם הזמן הקצוב. משך הזמן הקצוב חלף לפני השלמת הפעולה או שהשרת אינו מגיב.
ב- System.Data.SqlClient.SqlInternalConnection.OnError (חריגה SqlException, breakConnection בוליאניים)
ב- System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
ב- System.Data.SqlClient.TdsParserStateObject.ReadSniError (TdsParserStateObject stateObj, שגיאה UInt32)
ב- System.Data.SqlClient.TdsParserStateObject.ReadSni (DbAsyncResult asyncResult, TdsParserStateObject stateObj)
ב- System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
ב- System.Data.SqlClient.TdsParserStateObject.ReadByte()
ב- System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, זרם הנתונים SqlDataReader, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
ב- System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior runBehavior, resetOptionsString מחרוזת)
ב- System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, returnStream בוליאניים, async בוליאני)
ב- System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, returnStream בוליאניים, שיטת מחרוזת, התוצאה DbAsyncResult)
ב- System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (התוצאה DbAsyncResult, methodName מחרוזת, sendToPipe בוליאניים)
ב- System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
ב- TVPApp.Program.Main (מחרוזת ארגומנטים [])
השגיאה מתזמן-עצירת תצליח יחד עם הודעת שגיאה הדומה להודעה הבאה נרשמת ביומן שגיאה של שרת SQL:
< תאריך >< שעה > שרת באמצעות 'dbghelp.dll' גירסה '4.0.5'
שרת < תאריך >< שעה > *** אין אפשרות לקבל הקשר הליך המשנה עבור spid #
<Date><Time> Server * *******************************************************************************
שרת < תאריך >< שעה > *
שרת < תאריך >< שעה > * התחלת פעולת DUMP של מחסנית:
שרת < תאריך >< שעה > * spid < תאריך >< שעה > #
שרת < תאריך >< שעה > *
שרת < תאריך >< שעה > * אי-עצירת תצליח מתזמן
שרת < תאריך >< שעה > *
<Date><Time> Server * *******************************************************************************
חתימת המחסנית של שרת < תאריך >< שעה > עבור ה-dump הוא 0x000000000000002C
קוד < תאריך >< return תהליך dump זמן > שרת חיצוני 0x20000001.
תהליך חיצוני dump החזיר ללא שגיאות.
תהליך שרת < תאריך >< שעה > 0:0:0 (0x1670) העובד 0x0000000004EDE160 נראה שאינו-עצירת תצליח על 5 מתזמן. שעת היצירה של הליכי משנה: 13014210386757. משמש הליך משנה של מחזור ה-CPU: ליבה 0 ms, מר המשתמש 70106 ניצול תהליך 16%. מערכת סרק 77%. מרווח: ms 70140.
תהליך שרת < תאריך >< שעה > 0:0:0 (0x1670) העובד 0x0000000004EDE160 נראה שאינו-עצירת תצליח על 5 מתזמן. שעת היצירה של הליך משנה:
הגורם
בעיה זו מתרחשת עקב שגיאה במנגנון מסד הנתונים של SQL Server 2012. טקסט בעמודות TVP מיושמים כפי להוסיף מחרוזות או מאגרי ולאחר לגידול במספר שורות מגדילה את מספר המאגרים. עם זאת, התהליך המופצת מאגרי הוא לגזול זמן רב. לכן, נוצר שגיאת מתזמן-עצירת תצליח בעת שחרור וכיווץ פעולות להתרחש.
הערה בעיה דומה טופלה במאמר הבא מתוך מאגר הידע Microsoft Knowledge base. עם זאת, חבילת העדכון המצטבר המתואר במאמר אינו עבור בעיית פסק זמן של שאילתה.
תיקון 2520808 : שגיאה מתזמן-עצירת תצליח בעת הפעלת שאילתה אשר משתמש TVP ב- SQL Server 2008 או ב- SQL Server 2008 R2 אם נעשה שימוש SQL Profiler או אירועי מורחב של שרת SQL
פתרון
מידע עדכון מצטבר
חבילת העדכון המצטבר 5 עבור SQL Server 2012 Service Pack 1 (SP1)
התיקון עבור בעיה זו פורסם לראשונה ב- 5 עדכון מצטבר. לקבלת מידע נוסף אודות האופן שבו ניתן להשיג את חבילת עדכון מצטבר זה עבור SQL Server 2012, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
2861107 Cumulative בחבילת 5 עדכון עבור SQL Server 2012הערה מאחר גירסאות build הם מצטברים, כל פרסום תיקון חדש כולל את כל התיקונים החמים ולתקן כל תיקוני האבטחה שהיו כלולים בפרסום 2012 הקודם של שרת SQL מהדורה. אנו ממליצים לך לשקול החלת העדכניים ביותר פרסום התיקון החם הזה. לקבלת מידע נוסף, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:
2772858 2012 שרת SQL בניית תוכן שפורסמו לאחר SQL Server 2012 Service Pack 1 פורסם
פתרון הבעיה
כדי לעקוף בעיה זו, השתמש באחת מהשיטות הבאות:
-
אל תשתמש SQL Profiler או אירועי מורחב של שרת SQL.
-
לחץ כדי לנקות RPC: החל ו- RPC: הושלמה תיבות הסימון בהגדרת מעקב.
מידע נוסף
תיקון זה לא חל על SQL Server 2008 או SQL Server 2008 R2 KB זה מפורסם. אם כל המשתמשים נתקל באותה הבעיה ב- SQL Server 2008 או SQL Server 2008 R2 גם לאחר שהמשתמשים יחילו את החבילה המתואר במאמר הבא, לאמת אם אין זמן קצוב שאילתה ובדוק אם אפשרות לפענח את פרק הזמן הקצוב. בכל מקרה אחר, שלח בקשה כדי להחיל תיקון זה SQL Server 2008 או SQL Server 2008 R2.
תיקון 2520808 : שגיאה מתזמן-עצירת תצליח בעת הפעלת שאילתה אשר משתמש TVP ב- SQL Server 2008 או ב- SQL Server 2008 R2 אם נעשה שימוש SQL Profiler או אירועי מורחב של שרת SQL
מידע על מחסנית קריאות
sqlmin!CLinkedMap<__int64,CCheckReadersAndWriters::CCounts>::FLookup+0x29sqlmin!CCheckReadersAndWriters::Release+0x69
sqlmin!CMainIlb::{dtor}+0x3d
sqlmin!CMainIlb::`scalar deleting destructor'+0x3d
sqlmin!CBlobHandleFactoryMain::ReleaseILockBytes+0x13
sqlmin!CMainIlb::Release+0xf0
sqllang!CTraceRpcBinaryStream::~CTraceRpcBinaryStream+0x80
sqllang!CTraceTvpData::{dtor}+0x14
sqllang!CTraceTvpData::`scalar deleting destructor'+0x1e
sqllang!CRpcTraceHelper::CleanUpTraceTvpData+0x33
sqllang!CRpcTraceHelper::~CRpcTraceHelper+0x70
sqllang!CRPCExecEnv::~CRPCExecEnv+0x2ab
sqllang!CRPCExecEnv::`scalar deleting destructor'+0x14
sqllang!process_request+0x10b1
sqllang!process_commands+0x51c
sqldk!SOS_Task::Param::Execute+0x21e
sqldk!SOS_Scheduler::RunTask+0xa8
sqldk!SOS_Scheduler::ProcessTasks+0x299
sqldk!SchedulerManager::WorkerEntryPoint+0x261
sqldk!SystemThread::RunWorker+0x8f
sqldk!SystemThreadDispatcher::ProcessWorker+0x3c8
sqldk!SchedulerManager::ThreadEntryPoint+0x236
kernel32!BaseThreadInitThunk+0xd
ntdll!RtlUserThreadStart+0x1d
sqlmin!CLinkedMap<__int64,CCheckReadersAndWriters::CCounts>::FDelete+0x34sqlmin!CCheckReadersAndWriters::Release+0xfb
sqlmin!CMainIlb::{dtor}+0x3d
sqlmin!CMainIlb::`scalar deleting destructor'+0x3d
sqlmin!CBlobHandleFactoryMain::ReleaseILockBytes+0x13
sqlmin!CMainIlb::Release+0xf0
sqllang!CTraceRpcBinaryStream::~CTraceRpcBinaryStream+0x80
sqllang!CTraceTvpData::{dtor}+0x11
sqllang!CRpcTraceHelper::CleanUpTraceTvpData+0x55
sqllang!CRpcTraceHelper::TracePostExec+0x1bf
sqllang!CRPCExecEnv::OnExecFinish+0xaa
sqllang!CProtocolHeaderInfo::{dtor}+0xffffffff`ffb158e2
sqllang!process_request+0x764
sqllang!process_commands+0x51c
sqldk!SOS_Task::Param::Execute+0x21e
sqldk!SOS_Scheduler::RunTask+0xa8
sqldk!SOS_Scheduler::ProcessTasks+0x29a
sqldk!SchedulerManager::WorkerEntryPoint+0x261
sqldk!SystemThread::RunWorker+0x8f
sqldk!SystemThreadDispatcher::ProcessWorker+0x3c8
sqldk!SchedulerManager::ThreadEntryPoint+0x236
kernel32!BaseThreadInitThunk+0x1a
ntdll!RtlUserThreadStart+0x1d
מצב
Microsoft אישרה כי מדובר בבעיה במוצרי Microsoft הרשומים במקטע 'חל על'.
Author: jannaw
Writer: v-yipli
סוקר טכני: pradm; jannaw; hozhan
Editor: v-mordew