עבור לתוכן
Magic DevHub
Azriel

מפתחות איטיים ביוניפס מול MSSQL

Recommended Posts

מג'יק יוניפס 1.9, MSSQL 2008

יש לי תוכנית שפונה לMSSQL במפתח אינדקס והוא איטי, אני מנסה להאיץ את התוכנית.

יש לי שם טבלת MSSQL לא קטנה - 40 עמודות וכ 3 מיליון רשומות (קובץ לוג חיובים). יש לו מפתח פיסי אחד - נאמר לפי מספר הזמנה, והגדרתי אינדקס נוסף בשרת ובמג'יק למספר אסמכתא

כשאני פותח את הטבלה עם המפתח הראשי - מס' הזמנה - זה עולה מהר (כשניה). כשאני פותח לפי המפתח השני - לוקח נצח - כ 10 שניות.

כשאני עושה את הפעולה ישירות בשרת הSQL - קורא לטבלה להציג שורה אחת עם מספר אסמכתא - זה עולה מיד. אם אני עושה DIRECT SQL ביוניפס - עולה מהר.

בדקתי בלוג של יוניפס - לקחתי את אותה משפט SQL שהוא יוצר ושמתי ב SQL QUERY והרצתי - עולה מהר.

מה הסיפור ? למה המפתח השני איטי ביוניפס בעוד שבSQL זה מידי ? האם נגזר עלי להשתמש ב DIRECT SQL כדי לקרוא לרשומות שאני מחפש
למה מג'יק איטי בעוד שה SQL מהיר  כאן ?

אשמח לתשובות.

עזריאל

 


 

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

תבדוק במילון נתונים ברמת טבלה ->תכונות מקור הנתונים ->כרטסת SQL פרמטר סמן(CURSOR)

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

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

הי רומן

ניסיתי עכשיו להגדיר ברמת המקור נתונים את סמן = לא אך זה לא שינה את הביצועים

עוד רעיונות ?

הקובץ ענק אז אני מעריך שהוא רץ מהר על המפתח הראשי כי זה מפתח אמיתי.

אבל משום מה הוא לא רץ מהר על האינדקסים. שוב, בSQL אין בעיה, רק במג'יק כך שחייב להיות שהמג'יק לא ניגש נכון לאינדקס - כלומר לא ניגש באותה שיטה שבה הSQL ניגש לאתר רשומה אחת.

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

קראתי שאפשר ב MSSQL לפצל קובץ גדול כדי לשפר ביצועים - Clustering אבל לא בטוח שזה רלוונטי ולא נראה לי שארצה להיכנס לזה.

עזריאל

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

היי עזריאל,

האם מפתח שלך לפי אסמכתא הוא מדומה?

תנסה כמה דברים:

1) אם המפתח הוא חד ערכי בתכונות של הטבלה יש לך אפשרות לבחור "מיקום"(POSITION) לפי מפתח הרצוי שלך.שים לב שזה לא יפגע במקומות אחרים.

2)  לפתוח פרופילר ו לראות מה מג'יק מבצע מאחורי הקלעים.

3) אתה יכול להכריח מג'יק לרוץ לפי מפתח מסויים על ידי הגדרת HINT(רמז) ברמת טבלה ,לא רצוי לפי מג'יק ,רק במקרים מסויימים .

4) במקרה וכל זה לא עוזר ,לכתוב פרוצדורה ולא DIRECT SQL ,כך תחסוך ביצירת משימות מיותרות וגם יותר מומלץ.

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

התחבר או הרשם על מנת להגיב.

עליך להיות משתמש רשום על מנת להגיב

צור חשבון

צור חשבון חדש בקהילה בקלי קלות.

רישום חשבון חדש

התחבר

משתמש קיים? התחבר.

התחבר עכשיו

×