טוב אז אחרי חודשים של סיוטים בלילות, סוף סוף מצאתי את החלון שנותן מבט אל תוך הקרביים של SQL וגיליתי עד כמה אקסס צריך לפעמים חינוך מחדש....
אז כדי להסתכל מה קורה בזמן אמת בשרת ה SQL שלכם יש כמה מוניטורים בשוק, אבל בשבילי המוניטור הכי טוב שמצאתי הוא זה:
SELECT
SPID = er.session_id
,STATUS = ses.STATUS
,[Login] = ses.login_name
,Host = ses.host_name
,BlkBy = er.blocking_session_id
,DBName = DB_Name(er.database_id)
,CommandType = er.command
,SQLStatement = st.text
,ObjectName = OBJECT_NAME(st.objectid)
,ElapsedMS = er.total_elapsed_time
,CPUTime = er.cpu_time
,IOReads = er.logical_reads + er.reads
,IOWrites = er.writes
,LastWaitType = er.last_wait_type
,StartTime = er.start_time
,Protocol = con.net_transport
,ConnectionWrites = con.num_writes
,ConnectionReads = con.num_reads
,ClientAddress = con.client_net_address
,Authentication = con.auth_scheme
FROM sys.dm_exec_requests er
OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) st
LEFT JOIN sys.dm_exec_sessions ses
ON ses.session_id = er.session_id
LEFT JOIN sys.dm_exec_connections con
ON con.session_id = ses.session_id
where ses.status='running'
יש גם פרוצדורות שמראות קונקשנים פתוחים ועוד, אני משאיר את זה לסופטס, אבל הקוד שציטטתי מקודם ממש הציל את חיי.
אז ככה:
אם אתם רואים שלוקח לסלקט הזה זמן למלא את הרשומות, מצבכם גרוע מאוד מאוד, בידקו היטיב אם אתם לא נוהגים קלות ראש בכל מה שנוגע לתישאול מסד הנתונים.
אם אתם רואים שם בעמודה LastWaitType את הערך: ASYNC_NETWORK_IO מצבכם גם כן לא טוב בעליל, זה אומר שאקסס או מי שזה לא יהיה משאיר עיסקה פתוחה, כדי שמתי שהוא צריך הוא ימשוך רשומות בקלות, בלי תקורה של חיבור למסד הנתונים. למרבה הטמטום הדבר הזה עשוי לנעול רשומות ולמנוע עדכונים, אז תיזהרו לנפשכם מאוד.
כמו"כ אם הוא מכיל את הערך: LCK_M_IX (בשאילתת UPDATE) סימן שיש נעילות שמעכבות עדכונים, ובדרך כלל רשומות אחרות המכילות את הערך ASYNC_NETWORK_IO אשמות בכך.
ההתנהגות של אקסס בנושא הזה לא לגמרי צפויה, ולכן המלצות יבואו לפי הבעיות, כרגע מה שאני יודע זה לא ליצור לו טופס עם רשומות מרובות ולבצע מיקור של סלקט עם כוכבית (כלומר משיכת כל המידע מכל העמודות) אלא אם כן אתם דואגים במפורש שכל הרשומות יימשכו והעיסקה מול מסד הנתונים תיסגר (בדרך כלל אם עושים לו MoveLast זה עוזר)
אז נכון, אקסס זה כבר לא כלי שמתאים לעבודה עם מאות אלפי רשומות, אולם עם זאת כדאי לדעת איך באמת מנוע של דטה בייס עובד, ולהכיר לעומק את כל סוגי העיסקאות.
מצפה מהמומחים להמשיך ולהחכימנו בעניני מסדי נתונים.
פורסם במקור בפורום CODE613 ב27/08/2015 00:08 (+03:00)