max_connections ל sql server

max_connections ל sql server

יש בSQL SERVER דרך להגביל את מקסימום הCONNECTIONS לDB בו-זמנית. אפשר לראות את הMAX_CONNECTIONS שמוגדר ב master.dbo.spt_values . שאלתי היא: האם יש דרך לדעת כמה משתמשים מחוברים עכשו(ברגע מסוים) לDB ? תודה מראש
 
יכול להיות, שאת מתבלבלת בין

Server לDB? ניתן להגביל את כמות הconnections לשרת. בנוסף ניתן להגביל ברמת בסיס נתונים את ההגבלות הבאות: 1) להפוך אותו לsingle user ולתת רק לאדם אחד לעבוד איתו. 2) לתת רק לdbo וחברי הקבוצה sysadmin או dbcreator לעבוד עם בסיס נתונים מסויים. לא ידוע לי על אפשרות להגביל מספר connections ברמת בסיס הנתונים. ע"מ לדעת כמה connections מחוברים לבסיס נתונים מסויים, ניתן להריץ את השאילתה הבאה:
select count(*) from master..sysprocesses where spid > 50 and dbid = db_id('WriteDBNameHere')​
במידה ואת רוצה לדעת את כמות הconnections בשרת את יכולה להוריד את התנאי השני.
 
יכול להיות...

אני התכוונתי למקסימום CONNECTIONS שמוזכר ב sp_configure בשורות:
if (select high from master.dbo.spt_values where number=103 and type='C') <> @@max_connections update master.dbo.spt_values set high = @@max_connections where number = 103 and type='C'​
כשפתחתי קובץ EXE שפונה דרך BDE לDATABASE התקבלה שגיאה שנאמר בה "the maximum number of configured user connections are already connected" "System Administrator can configure to a higher value with sp_configure" אז הסתכלתי בsp_configure והקוד הנ"ל היה נראה לי הרלוונטי. אבל כשבדקתי ראיתי שה high שווה ל32767 ולא נראה לי שבאמת מספר הCONNECTIONS המחוברים באותו רגע היה כ"כ גבוה. לכן רציתי לדעת אם יש דרך לשאול על מספר החיבורים ברגע מסוים. הרצתי את השאילתא שהצעת אך
select * from master.dbo.sysprocesses where spid > 50 dbid = db_id('MyDbName')​
מביא 0 רשומות. בלי התנאי של גדול מ50 מתקבל המספר. מה הכוונה בתנאי של גדול מ50? אני מניחה שיש CONNECTIONS שנפתחים אוטומטית, של המערכת? אז אולי יתכן שבSQL SERVER 7 זה עד 20? תודה לך מראש
 
מס' connections

בתאוריה מס' הconnections המקסימאלי הוא 32767, אבל בפועל הוא פחות. בזמנו שמעתי במצגת, שהמספר הכי גבוה שבו מיקרוסופט תומכת הוא באיזור ה12000 connections. אישית יצא לי להתעסק רק עם מערכת אחת שהיגיע לאלפי connections בו זמנית, (אבל לא התקרב ל12000) ואני מתייחס להגבלה של מספר הconnections כדבר תאורטי. הסיבה שהוספתי את התנאי של spid>50, היא שלכל מה שרץ בשרת יש מספר מזהה, שנקרא spid. המספרים 1 עד 50, שמורים לprocesses של השרת עצמו. המשתמשים יכולים לקבל מספר מעל 50 בלבד. הסיבה שלא קיבלת שום connection היא, שאת צריכה להוריד את התנאי השני. הוספתי אותו רק להדגים איך לקבל מספר connections לבסיס נתונים ספציפי, כאשר את הסטרינג MyDBName אמורים להחליף לשם בסיס הנתונים, שאותו רוצים לבדוק.
 
תודה, גם ...

גם אני התיחסתי להגבלה של מספר הconnections כדבר תאורטי.בפרט שאני יודעת שלמערכת המדוברת לא מחוברים יותר מעשרה משתמשים בו-זמנית. אבל אם כך. מה יכולה להיות הסיבה להודעת השגיאה המוזרה : the maximum number of configured user connections are already connected System Administrator can configure to a higher value with sp_configure שמתקבלת לפעמים בהרצה של הEXE אצל משתמש מסוים, כאשר יש מספר קטן של משתמשים מחוברים? חשבתי אולי נשארו CONNECTIONS פתוחים שלא נסגרו גם כשהמשתמש יצא.האם זה יכול להיות? מתחברים למערכת דרך קובץ EXE כאמור.ברגע שסוגרים את הEXE הCONNECTION ודאי נסגר,הלא כן? תודה רבה על העזרה עד כה
 
תבדקי מספר דברים

קודם כל תבדקי כמה connections מקונפגים על השרת. ניתן לעשות את זה ע"י הרצת הקוד הבא בQA:
exec sp_configure 'show advanced options', 1 reconfigure with override exec sp_configure 'user options' exec sp_configure 'show advanced options', 0 reconfigure with override​
במידה ויש לך מספר שונה מ0, אז יש לך הגבלה על מספר המשתמשים ששוה למספר, שמופיע (הבדיקה צריכה להיות תחת המספר שמופיע בעמודה run_value). במידה ואכן השרת מוציא הודעה, שמספר הconnections הקיימים הגיע למקסימום, אז הוא מכניס הודעה לerror log. שווה לך לבדוק את הerror log של השרת (ע"י הרצת sp_readerrorlog מהQA). במידה ואכן יש הודעת שגיאה תואמת בError log, שווה לבדוק את האפליקציה. יכול להיות, שיש פתחיחה של connections בלולאה ללא סגירה של הconnection. דרך אגב היה לי מקרה בעבר, שבו קיבלתי מהשרת הודעות פיקטיביות לגבי מספר connections. לצערי אני לא זוכר את הפרטים.
 
למעלה