OUT OF MEMORY - REPORTING SERVICES

flenger

New member
OUT OF MEMORY - REPORTING SERVICES

מישהו נתקל בתופעה הזאת ? במערכת שלנו אנחנו מאפשרים לייצר דוחות ( בבקשה אל תשאלו אותי למה :) ) שהגודל שלהם במקרים קיצוניים יכול לעבור את ה200 מגה מבחינת הSQL נראה שהכל תקין כלומר , הsql סיים את עבודתו וכרגע נשאר רק עבודת יצירת הדוח עצמו ותמיד הוא נכשל עם OUT OF MEMORY למרות שבמכונה יש 4 גיגה זיכרון מעבד 4 ליבות ויש הרבה מקום פנוי על ההרד דיסק תודה מראש לעוזרים
 

pitoach

New member
אם תבדוק בפרופיילר מה השאילתה שמבוצעת ומה

מגיע לדוח תבין למה דוחות גדולים הם בעייתיים. אם תנסה לפתוח קובץ טקסט רגיל בגודל 200 מגה בתוכנת הכתבן אתה ככל הנראה תקבל שגיאה זהה או שתאלץ להמתין הרבה מאוד זמן (מעבר לזמן שדוח ה SSRS מאפשר בברירת המחדל). תצוגה גרפית לא נועדה להציג נתונים של 200 מגה ולהיות עם באורך של מאות מליון רשומות. * אני לא יודע בדיוק מה אתה מקבל מפני שלא צירפת לנו דוחות לוגים של השרת ואין לי נתונים אבל התופעה בעקרון ברורה. להערכתי יש בעיה באפיון אם אתה צריך להציג במסך 200 מגה של טקסט. דרך כלל נהוג לבצע למשל חלוקה לעמודים ולהציג נתונים חלקיים בכל פעם.
 

flenger

New member
אתה צודק , לא הייתי מספיק ברור

כמו שאמרתי מבחינת הפרופיילר השאילתא מתבצע כמו שצריך ואפילו יחסית מהר לכמות המידע אז ניתן קצת יותר פרטים על המערכת מדובר במערכת DESKTOP , תמיכת הבסיס את SQL 2005 הבעיה היא בצד של הRS שפשוט לא מצליח ליצור את הדוח ותמיד נופל על OUT OF MEMORY ולגבי ההצגה של הדוח אנחנו ממש לא מציגים את הדוח ברגע שהוא מסתיים הדוח נוצר על המחשב ואם המשתמש רוצה הוא יכול לפתוח אותו ואז עניין הפתיחה של הקובץ הוא כבר לא קשור למערכת לגבי הבעיה באיפיון של גודל הדוח אני מסכים איתך ויש לי ויכוח קבוע עם המנהל פרוייקט שלנו , ואני תמיד חוזר ואומר מה לעזזל לקוח יעשה עם דוח של 5000 עמודים ? אבל הוא אומר שזה מה שהלקוחות רוצים אז מי אני שאתווכח בנתיים הגענו לפשרה שבמקרים כאלה פשוט הדוח יחולק למספר חלקים כלומר בכל פעם ואז במקום דוח אחד של 200 מגה יצאו נגיד 5 של 40 תודה על העזרה
 

pitoach

New member
רעיון: במקום להציג דוח של 200M פשוט צור קובץ

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

flenger

New member
זה בדיוק מה שקורה עכשיו :)

הבעיה שהREPORTING SERVICES לא מצליח בכלל ליצר את הדוח
 

pitoach

New member
אני לא חושב שהסברתי את עצמי טוב

לא התכוונתי לשמור את הדוח כדוח אלא לשמור את הנתונים בקובץ טקסט פשוט (למשל הפרדת פסיק או הפרדת טאב או במלים אחרות משהו כמו csv) ואז כשרוצים לצפות בדוח לייצר אותו ישירות מהקובץ בלי קשר למסד הנתונים. - הקובץ אמור להיווצר תמיד ללא בעיה ובמהירות - הצפייה יכולה להיות עדיין כבדה אבל לא קשורה למסד הנתונים - ניתן לפתוח את הקובץ אם רוצים באקסל או לגשת אליו בכל צורה אחרת ולא רק בדוח גרפי יפה - אם ממש רוצים ניתן לגשת אליו גם בעזרת חלוקת עמודים בהתבסס על בחירת שוורות מסויימות בלי קשר ל SELECT או ל סינון ומיון כמו במסד נתונים אלא שהדבר מבוצע עיוורת (לא באמת בודקים את התוכן) והרבה יותר מהיר לכן
 

flenger

New member
האמן לי שהכל נוסה כבר

הכל גרם לRS לקרוס :S לכן שאלתי אם יש איזה פרמטר נסתר שמגביל את גודל הקובץ שהוא מסוגל לייצר
 

pitoach

New member
אבל אני מציע לעקוף את הבעיה ולא לעבוד עם RS

אני מציע לייצר קובץ טקסט בצורה ישירה ואז לגשת אליו זה לא רעיון באוויר אלא משהו שביצעתי בעבר על דוחות של כמעט גיגה (התוצאה כמובן) וזה פעל מצויין בשיטה זו הצלחתי בעבר להוציא דוח תוך כ 4 שניות עבור שנה שלמה של כל הפעילות של חברה שביקשה זאת ממני (משהו שלקח להם לפני זה יותר מחצי שעה עבור חודש אחד בלבד ועל חלק בלבד של הנתונים ואם היה מבוצע על כל הנתונים אפילו רק על חודש זה היה קורס לפני הסיום) * תשכח לרגע את האמצעי ותחשוב על המטרה שלך... אני מציע להגיע למטרה באמצעי/דרך שונה לחלוטין ולא באמצעות דוחות של SQL. כל מפתח סביר יוכל לפתח לך מערכת כזו (לאחר שיהיה לו אפיון ובזה אני אוכל לעזור). אם הרצת השאילתה לוקח X זמן אז אין סיבה שבשיטה שאני מציג הזמן של יצירת הקובץ הסופי יקח יותר מ X+כמה שניות של כתיבת 200 מגה לקובץ. בכל מקרה אם הגעתם לפתרון שמתאים לכם ומכסה את הצרכים אז מה יותר טוב
אם תחליט שאתה רוצה לחשוב על כיוון אחר אז אתה יודע היכן אני
 

flenger

New member
אני אוהב את הגישה שלך :)

אני אנסה את זה למרות שאף אחד לא שיכנע אותי אחרת ולדעתי דוח אמור להיות מצומצם ככל שניתן בטח שלא 200 מגה ובטח שלא גיגה :) תודה על הרעיון
 

sirpad

New member
מנהל הפרוייקט אומר שהלקוחות רוצים?

או שהוא לא יודע מה הלקוחות רוצים, או שהוא מתרגם את הרצון של הלקוחות באופן שגוי. אם יש לקוח שרוצה דוח של מיליון רשומות, אז הוא לא רוצה דוח, הוא רוצה פלט של הרשומות כדי לייבא את הרשומות למערכת אחרת, סביר להניח, אלא אם הלקוח אידיוט. כשיש לך רק פטיש בארגז כלים, הלא נראה כמו מסמר, מכיר את הפתגם הזה? אז כשרוצים לעשות פלט של רשומות, ולא יודעים איך, אבל יודעים לעשות דוח בSSRS, אז עושים את בSSRS. למרות שזה לא הכלי האידאלי למשימה. או שתכתוב קוד מאוד פשוט ב.NET, פונקציה טריוויאלית לחלוטין, או שתקרא קצת הכלי bcp, כלי שמסופק יחד עם הsql server, ומאפשר קלט ופלט של רשומות ל- ומקבצי טקסט.
 
למעלה