דלג לתוכן הראשי
היכנס דרך Microsoft
היכנס או צור חשבון.
שלום,
בחר חשבון אחר.
יש לך חשבונות מרובים
בחר את החשבון שברצונך להיכנס באמצעותו.

סיכום

כאשר אתה משתמש במנהל התקן ODBC של שרת SQL, SQL Server ספק OLE DB או הספק מנוהל System.Data.SqlClient, תוכל להשבית לצירוף באמצעות ממשקי תכנות (Api) של היישום המתאים. כאשר תהפוך צירוף, ניתן להגדיל מאמץ בספריית הרשת הבסיסית של SQL Server אם היישום פותח לעתים קרובות וסגירת חיבורים. מאמר זה מתאר הגדרות tcp/IP מסוימות ייתכן שיהיה עליך להתאים בתנאים אלה.

מידע נוסף

ביטול איגוד יכול לגרום ל- SQL Server רשת מנהל ההתקן המתאים לפתוח ולסגור במהירות את חיבורי ה-socket החדש למחשב שבו פועל SQL Server. ייתכן שיהיה עליך לשנות את הגדרות ברירת המחדל של ה-socket tcp/IP עבור מערכת ההפעלה והמחשב שבו פועל SQL Server כדי להתמודד עם רמות עומס גבוה יותר.

הערה מאמר זה דן רק הגדרות המשפיעות על ספריית רשת של SQL Server בעת שימוש בפרוטוקול tcp/IP. ביטול צירוף עשוי גם לגרום לבעיות הקשורות מאמץ עם אחרים פרוטוקולי שרת SQL כגון רכיבי named pipe, אך מאמר זה אינו דן בנושא זה. מאמר זה מיועד למשתמשים מתקדמים בלבד. אם אינך מבין הנושאים במאמר זה, Microsoft ממליצה כי תראה ספר טוב אודות רכיבי socket של tcp/IP.

שים לב כי Microsoft ממליצה תמיד להשתמש באגירת עם מנהלי התקנים של שרת SQL. באמצעות צירוף מאוד משפרת את הביצועים הכוללים הן בצד הלקוח והן בצד שרת SQL כאשר אתה משתמש במנהלי ההתקן של שרת SQL. שימוש באגירת במידה ניכרת גם מצמצם את תעבורת הרשת למחשב שבו פועל SQL Server. לדוגמה, מחשב לדוגמה שהשתמשו 20,000 SQL Server חיבור פותחת וסוגרת עם מאגר זמין לשימוש מנות רשת tcp/IP בכ-160, סכום הבתים 23,520 של פעילות רשת. עם מאגר זמין, מחשב לדוגמה זהה שנוצר 225,129 מנות רשת tcp/IP, כולל של בתים 27,209,622 של פעילות רשת.

הערה כאשר תראה אלה מאמץ tcp/IP socket בעיות הקשורות עם הספריות ברשת של שרת SQL, ייתכן שתקבל אחת או יותר מהודעות השגיאה הבאות בעת ניסיון להתחבר למחשב שבו פועל SQL Server:

שרת SQL אינו קיים או נדחתה על-ידי Access

תם הזמן הקצוב

שגיאה כללית של רשת

ספק TCP: רק שימוש אחד בכל כתובת socket (פרוטוקול/כתובת רשת/יציאה) מותר בדרך כלל.

שים לב כי באפשרותך גם לקבל הודעות שגיאה ספציפיות אלה כאשר מתרחשות בעיות אחרות עם SQL Server; לדוגמה, ייתכן שתקבל הודעות שגיאה אלה אם לכבות את המחשב המרוחק שבו פועל SQL Server, אם המחשב המרוחק שבו פועל SQL Server אינו מאזין ל- sockets tcp/IP, אם קישוריות רשת למחשב שבו פועל SQL Server מנותקת מכיוון שכבל הרשת שהוצאה החוצה, או אם אתה נתקל בעיות רזולוציה של DNS. למעשה כל דבר עלול לגרום ללקוח להיכשל לפתיחת socket tcp/IP למחשב שבו פועל SQL Server עלול לגרום גם הודעות שגיאה. עם זאת, עם בעיית socket הקשורות מאמץ, הבעיה מתרחשת לסירוגין כאשר העומס עולה יורד. המחשב עשוי לפעול במשך שעות ללא שגיאות ולאחר מכן השגיאה מתרחשת פעמים אחת או שתיים, וגם במחשב ולאחר מכן מופעלת עבור כמה שעות נוספות ללא שגיאות. כמו כן, כאשר נתקלת בבעיה זו, כללי קישוריות לשרת SQL פועל מיידית אחד, נכשלת הבא ולאחר מכן פועל מיידית הבא שוב. במילים אחרות, בעיות הקשורות מאמץ socket בדרך כלל מתרחשים sporadically, אולם אמיתי בעיות קישוריות רשת עם SQL Server בדרך כלל לא מתרחש sporadically.

שתי בעיות הקשורות מאמץ הראשי מתרחשות בדרך כלל כאשר תבטל באגירת תוך שימוש בפרוטוקול tcp/IP של שרת SQL: עשוי לאזול אנונימי היציאות במחשב הלקוח, או עשוי לחרוג הגדרת WinsockListenBacklog ברירת המחדל במחשב שבו פועל SQL Server.


לקבלת מידע נוסף אודות יציאות אנונימית, לחץ על מספר המאמר שלהלן כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:

319502 PRB: הודעת שגיאה 'WSAEADDRESSINUSE' בעת ניסיון להתחבר באמצעות יציאת אנונימיים לאחר הגדלת מגבלת החיבורים IMAP

התאם את הגדרות MaxUserPort ו- TcpTimedWaitDelay

שים לב MaxUserPort והגדרות TcpTimedWaitDelay ישימים רק עבור מחשב לקוח אשר הוא במהירות פתיחה וסגירה חיבורים למחשב מרוחק בו פועל SQL Server וכי שאינם משתמשים באגירת חיבורים. לדוגמה, הגדרות אלה ישימות בשרת Internet Information Services (IIS) אשר הוא מספר רב של בקשות HTTP נכנסות וטיפול בהם הוא פתיחה וסגירה חיבורים למחשב מרוחק שבו פועל SQL Server, אשר עושה שימוש בפרוטוקול tcp/IP עם מאגר זמין. אם באגירת זמינה, אין לך להתאים את ההגדרות MaxUserPort ו- TcpTimedWaitDelay .

בעת שימוש בפרוטוקול tcp/IP כדי לפתוח חיבור למחשב שבו פועל SQL Server, ספריית הרשת המשמשת כבסיס של SQL Server יפתח socket tcp/IP למחשב שבו פועל SQL Server. כאשר היא נפתחת ב- socket זה, ספריית רשת של SQL Server אינו מאפשר את האפשרות socket של tcp/IP SO_REUSEADDR . לקבלת מידע נוסף אודות הגדרת שקע SO_REUSEADDR , עיין בנושא "Setsockopt" רשת מפתחים של Microsoft (MSDN).


שים לב כי ספריית רשת של SQL Server באופן ספציפי אינו מאפשר את האפשרות socket של tcp/IP SO_REUSEADDR מסיבות אבטחה. כאשר SO_REUSEADDR מופעלת, משתמש זדוני יכול לחטוף יציאה לקוח לשרת SQL ומשתמשות באישורים המספק את הלקוח כדי לקבל גישה למחשב שבו פועל SQL Server. כברירת מחדל, מאחר ספריית רשת של SQL Server אינו מאפשר את האפשרות שקע SO_REUSEADDR , בכל פעם פתיחה וסגירה של socket באמצעות ספריית הרשת SQL Server בצד הלקוח, ה-socket נכנס למצב TIME_WAIT עבור ארבע דקות. אם אתה במהירות פתיחה וסגירה של חיבורי שרת SQL באמצעות tcp/IP עם מאגר זמין, הן במהירות פתיחה וסגירה sockets tcp/IP. במילים אחרות, כל חיבור שרת SQL יש שקע אחד של tcp/IP. אם אתה במהירות פותח וסוגר 4000 sockets בפחות מ- 4 דקות, יגיעו לברירת המחדל המרבי עבור יציאות אנונימי לקוח נסיונות התקשרות socket חדש להיכשל עד ערכה קיימת של רכיבי socket TIME_WAIT הזמן שהוקצב.

בצד הלקוח, ייתכן שיהיה עליך להגדיל את הגדרות MaxUserPort ו TcpTimedWaitDelay הנדונים Q319502 כאשר יש ברשותך מאגר זמין. ההגדרות עבור ערכים אלה נקבעים על-ידי חיבור לשרת SQL כמה נפתח וסגירת להתרחש בצד הלקוח. ניתן לבדוק כמה יציאות לקוח הנמצאות במצב TIME_WAIT על-ידי שימוש בכלי Netstat במחשב הלקוח. הפעל את הכלי Netstat עם הדגל -n כדלקמן ולאחר לספור את מספר sockets הלקוח שלך לכתובת ה-IP של שרת SQL אשר נמצאים במצב TIME_WAIT. בדוגמה זו, 10.10.10.20 היא כתובת ה-IP של המחשב המרוחק שבו פועל SQL Server, כתובת ה-IP של מחשב הלקוח 10.10.10.10 ואת שלוש ליצור חיבורים וחיבורי שני הנמצאות במצב TIME_WAIT:

C:\>netstat -n
Active Connections

Proto Local Address Foreign Address State
TCP 10.10.10.10:2000 10.10.10.20:1433 ESTABLISHED
TCP 10.10.10.10:2001 10.10.10.20:1433 ESTABLISHED
TCP 10.10.10.10:2002 10.10.10.20:1433 ESTABLISHED
TCP 10.10.10.10:2003 10.10.10.20:1433 TIME_WAIT
TCP 10.10.10.10:2004 10.10.10.20:1433 TIME_WAIT

אם תפעיל את הפקודה netstat - n תראה כי קרוב 4000 חיבורי ה-ip כתובת של מחשב היעד שבו פועל SQL Server הנמצאות במצב TIME_WAIT, אתה יכול להגדיל MaxUserPort ברירת המחדל וגם להקטין את ההגדרה TcpTimedWaitDelay כך די יציאות אנונימי לקוח לא. לדוגמה, באפשרותך לקבוע את ההגדרה MaxUserPort כדי 20000 ולהגדיר את ההגדרה TcpTimedWaitDelay ל- 30. הגדרת TcpTimedWaitDelay נמוכה יותר פירושו כי ה-sockets להמתין במצב TIME_WAIT בפחות זמן. קביעת MaxUserPort גבוהה יותר פירושה שניתן לכלול רכיבי socket נוסף במצב TIME_WAIT.

שים לב כי אם תשנה את ההגדרה MaxUserPort או TcpTimedWaitDelay , עליך להפעיל מחדש Microsoft Windows שההגדרות החדשות ייכנסו לתוקף. הגדרות MaxUserPort ו- TcpTimedWaitDelay הם עבור כל מחשב לקוח לדבר אל המחשב שבו פועל SQL Server מעל sockets tcp/IP. הגדרות אלה אין כל השפעה אם הן מוגדרות במחשב שבו פועל SQL Server אלא אם כן אתה מבצע התקשרויות מקומיות של socket tcp/IP במחשב המקומי שבו פועל SQL Server.

הערה אם תשנה את ההגדרה MaxUserPort , אנו ממליצים לשמור יציאת 1434 לשימוש על-ידי שירות הדפדפן של שרת SQL (sqlbrowser.exe). לקבלת מידע נוסף אודות אופן ביצוע פעולה זו, לחץ על מספר המאמר הבא כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:

כיצד לשמור טווח של יציאות ארעיות במחשב שבו פועל Windows Server 2003 או Windows 2000 Server 812873

לכוונן את הגדרת WinsockListenBacklog

לקבלת מידע נוסף אודות הגדרת רישום זו ספציפית ל- SQL Server, לחץ על מספר המאמר שלהלן כדי להציג את המאמר הרלוונטי מתוך Microsoft Knowledge Base:

154628 INF: SQL נכנס 17832 עם מספר בקשות חיבור TCP\IP
כאשר ספריית רשת של SQL Server מאזין sockets tcp/IP, שרת SQL רשת שהספרייה את להאזין Winsock API. הפרמטר השני עבור להאזין API הוא מצבור שמורשה עבור ה-socket. מצבור זה מייצג את האורך המרבי של התור של חיבורים עבור המאזין ממתינים. כאשר אורך התור חורג מהאורך המרבי הזה, ספריית רשת של SQL Server דוחה באופן מיידי יותר נסיונות התקשרות socket של tcp/IP. בנוסף, ספריית רשת של SQL Server שולח מנת אישור ומונה + איפוס.

שימושים של SQL Server 2000 ברירת מחדל להאזין הגדרה מצבור של 5. משמעות הדבר היא כי המחשב שבו פועל SQL Server מעביר את הערך 5 לפרמטר מצבור של להאזין Winsock API בעת API להאזין מגדיר את הליכי ההאזנה של פרוטוקול tcp/IP במחשב שבו פועל SQL Server. באפשרותך להתאים את מפתח הרישום WinsockListenBacklog כדי לציין ערך שונה שיועברו עבור פרמטר זה. החל ב- SQL Server 2005, ספריית הרשת מעביר ערך של SOMAXCONN כהגדרת מצבור להאזין API. SOMAXCONN מאפשר הספק Winsock לקביעת ערך הגיוני המרבי עבור הגדרה זו. לכן, מפתח הרישום WinsockListenBacklog עוד בשימוש או הצורך ב- SQL Server 2005.

מצבור הגדרת פועלת באופן הבא: נניח מאזין שירות שרירותי עבור בקשות נכנסות של socket tcp/IP. אם תגדיר את ההגדרה מצבור 5 וזרימת בקשות התקשרות socket רבים הם ללא הרף ב, השירות ייתכן שלא תוכל להגיב לבקשות נכנסות מהירה כפי שהם מגיעים. בנקודה זו, שכבה socket של tcp/IP תורים אלה בקשות נכנסות בתור מצבור ולאחר השירות ניתן למשוך את הבקשות מחוץ לתור זה ולטפל בקשת ההתקשרות הנכנסת socket במועד מאוחר יותר. לאחר התור מתמלא, שכבה socket של tcp/IP מיד דוחה בקשות שקעים נוספים הכלולים בעל-ידי שליחת מנת אישור ומונה + איפוס בחזרה ללקוח. הגדלת מגדיל גודל התור מצבור שמספר הממתינים התקשרות socket של מבקש שכבת ה-socket של tcp/IP תורים לפני בקשות נדחות.

שים לב כי ההגדרה WinsockListenBacklog ספציפיות ל- SQL Server. SQL Server מנסה לקרוא הגדרת רישום זו בעת הפעלה ראשונה של שירות SQL Server. אם ההגדרה אינה קיימת, שימוש בברירת המחדל של 5. אם הגדרת הרישום קיים, שרת SQL קורא את ההגדרה ומשתמש שהערך המסופק כפי ההגדרה מצבור בעת האזנה WinSock API נקרא כפי הליכי משנה של ההאזנה של socket tcp/IP מוגדרות למעלה בתוך שרת SQL.

כדי לקבוע אם אתה מפעיל לתוך בעיה זו, תוכל להפעיל מעקב של צג הרשת בלקוח או המחשב שבו פועל SQL Server וחפש עבור בקשות התקשרות socket אשר נדחות באופן מיידי עם ACK + איפוס. אם תבחן את מנות tcp/IP ב'צג הרשת, תראה מנה כגון הבאות כאשר הוא התרחשות של בעיה זו:

Frame: Base frame propertiesETHERNET:  EType = Internet IP (IPv4) 
IP: Protocol = TCP - Transmission Control; Packet ID = 40530; Total IP Length = 40; Options = No Options
TCP: Control Bits: .A.R.., len: 0, seq: 0-0, ack:3409265780, win: 0, src: 1433 dst: 4364
TCP: Source Port = 0x0599
TCP: Destination Port = 0x110C
TCP: Sequence Number = 0 (0x0)
TCP: Acknowledgement Number = 3409265780 (0xCB354474)
TCP: Data Offset = 20 bytes
TCP: Flags = 0x14 : .A.R..
TCP: ..0..... = No urgent data
TCP: ...1.... = Acknowledgement field significant
TCP: ....0... = No Push function
TCP: .....1.. = Reset the connection
TCP: ......0. = No Synchronize
TCP: .......0 = Not the end of the data
TCP: Window = 0 (0x0)
TCP: Checksum = 0xF1E7
TCP: Urgent Pointer = 0 (0x0)

שים לב כי יציאת המקור 0x599, או 1433 בתבנית עשרונית. פירושו של המנה מגיעה ממחשב טיפוסי שבו פועל SQL Server וכי פועל יציאת ברירת המחדל של 1433. כמו כן, שים לב להגדיר שדה אישור משמעותי ודגלים לאפס את החיבור . אם אתה מכיר את סינון מעקב של צג הרשת, באפשרותך לסנן את הערך דגלים TCP לפי 0x14 הקסדצימאלי כדי לראות רק את המנות ACK + איפוס בהמעקב של צג הרשת.

שים לב כי באפשרותך גם לראות מנות ACK + איפוס דומה אם המחשב שבו פועל SQL Server אינו פועל כלל, או אם המחשב שבו פועל SQL Server אינו מאזין לפרוטוקול tcp/IP, לכן לראות מנות ACK + איפוס אינו אישור מוגדרת נתקלת בבעיה זו. אם WinsockListenBacklog נמוכה מדי, חיבור מסוים לקבל נסיונות לקבל מנות ולקבל התקשרויות מסוימות מיד ACK + איפוס מנות בתוך מסגרת הזמן של אותו.

שים לב כי במקרים נדירים מאוד, ייתכן שיהיה עליך לשנות את ההגדרה גם אם באגירת זמין במחשבי הלקוח. לדוגמה, אם אתה משוחח רבות מחשבי לקוח מחשב יחיד שבו פועל SQL Server, מספר רב של נסיונות התקשרות נכנסת בו-זמנית עלולה להתרחש בכל עת מסוים גם אם לאפשר צירוף.

הערה אם תשנה את ההגדרה WinsockListenBacklog , אין להפעיל מחדש את Windows עבור הגדרה זו כדי שהשינוי ייכנס לתוקף. פשוט הפסק והפעל מחדש את שירות שרת SQL עבור ההגדרה שהשינוי ייכנס לתוקף. הגדרת הרישום WinsockListenBacklog הוא רק עבור המחשב שבו פועל SQL Server. אין לו השפעה כלשהי על מכל מחשב לקוח שלא לדבר על שרת SQL.

זקוק לעזרה נוספת?

מעוניין באפשרויות נוספות?

גלה את יתרונות המנוי, עיין בקורסי הדרכה, למד כיצד לאבטח את המכשיר שלך ועוד.

קהילות עוזרות לך לשאול שאלות ולהשיב עליהן, לתת משוב ולשמוע ממומחים בעלי ידע עשיר.

האם מידע זה היה שימושי?

עד כמה אתם מרוצים מאיכות השפה?
מה השפיע על החוויה שלך?
בלחיצה על 'שלח', אתה מאפשר למשוב שלך לשפר מוצרים ושירותים של Microsoft. מנהל ה-IT שלך יוכל לאסוף נתונים אלה. הצהרת הפרטיות.

תודה על המשוב!

×