DCSIMG
עמוד הבית| חבילות השירות שלנו| חומר חופשי| צור קשר
May 2010 - Posts - בלוג היועצים של מיקרוסופט ישראל

בלוג היועצים של מיקרוסופט ישראל

May 2010 - Posts

שדרוג ל Windows 7 - איך להתחיל

רוצים לשדרג תחנות עבודה בארגון ל Windows 7? לא יודעים איך להתחיל?

שלב ראשון – סקירת מצב קיים

1. מידע לאיסוף:

- מידע כללי (מערכות הפעלה בשימוש בתחנות עבודה, רשימת שפות לתמיכה, מערכת שו"ב ארגונית ועוד)

- אפליקציות (כמויות, שיטות הפצה, פיתוח פנימי ועוד)

- תהליך Imaging

- תשתיות (כללי, תקשורת, הבטחת מידע ועוד)

2. סקר מצב חומרה

- כדי לבדוק תאימות חומרה ל Windows 7, ניתן להריץ כלי חינמי בשם Microsoft Assessment and Planning (MAP) Toolkit. מידע נוסף: http://technet.microsoft.com/en-us/solutionaccelerators/dd627342.aspx

3. סקר מצב תוכנה

- כדי לקבל רשימת אפליקציות בשימוש ותאימות שלהן ל Windows 7, ניתן להריץ כלי חינמי נוסף בשם Application Compatibility Toolkit (ACT). מידע נוסף:

http://technet.microsoft.com/en-us/windows/aa905066.aspx

מה שלבים הבאים? איך בונים Image יחיד - כלל ארגוני? איך מפיצים אותו?

צרו אתנו קשר ונשמח לעזור.

אלכסיי

מתי לא להשתמש - User Defined Functions - UDF

 

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

אבל, בכתיבה של SQL  זה לא תמיד כדאי.

אז הנה דוגמא מהחיים (הדוגמאות רצות על AdventureWorks):

אנו רוצים לכל ספק את סכום ההזמנות, כמות הפריטים, סכום ממוצע לפריט ומשקל ממוצע לפריט

השיטה בעזרת פונקציות:

לעבור על טבלת הספקים, ההזמנות ושורות ההזמנה

קוד בעזרת פונקציות (הגדרות הפונקציות בנספח):

SELECT PV.VendorID, Purchasing.fn_SumQty(PV.VendorID) SumQty, Purchasing.fn_SumValue(PV.VendorID) SumValue ,

      Purchasing.fn_SumFreight(PV.VendorID) SumFreight,

      Purchasing.fn_SumValue(PV.VendorID) / Purchasing.fn_SumQty(PV.VendorID) AvgQty,

      Purchasing.fn_SumFreight(PV.VendorID) / Purchasing.fn_SumQty(PV.VendorID) AvgFreight

FROM Purchasing.ProductVendor PV

הביצועים - ברצפה (11 שניות, 200K Reads)

 

נעבור לשיטה חלופית (הסבר יבוא):

SELECT PV.VendorID, SumQty, SumValue, SumFreight, SumValue/SumQty AvgQty, SumFreight/SumQty AvgFreight

FROM Purchasing.ProductVendor PV

LEFT OUTER JOIN

(select VendorID,sum(Freight) SumFreight, sum(LineTotal) SumValue, sum(cast(OrderQty as int)) SumQty

from Purchasing.PurchaseOrderHeader H

inner join Purchasing.PurchaseOrderDetail D

on H.PurchaseOrderID = D.PurchaseOrderID

GROUP BY VendorID) HelpSumOrders

on PV.VendorID = HelpSumOrders.VendorID

הביצועים - מצויינים (0.2 שניות, Reads 112) - פי 55 יותר מהר, פחות מאלפית פעולות IO

 

אז מה הקסם:

  • פעולת ה JOIN הישירה מאפשרת לאופטימייזר לקרוא את הטבלאת פעם אחת ולא פעם לכל שורה
  • בנוסף, במימוש המקורי יש 5 קריאות לפונקציה לכל שורה!!

מסקנה:

אל תשמשו בפונקציות העושות פניות נוספות ל Database אלא אם מספר השורות נמוך!!

 

נספח פונקציות:

CREATE FUNCTION Purchasing.fn_SumFreight (@VendorID int) RETURNS money

AS

BEGIN

DECLARE @SumFreight MONEY

select @SumFreight= sum(Freight) from Purchasing.PurchaseOrderHeader

WHERE VendorID = @VendorID

RETURN (@SumFreight)

END

go

CREATE FUNCTION Purchasing.fn_SumValue (@VendorID int) RETURNS money

AS

BEGIN

DECLARE @SumLineTotal MONEY

select @SumLineTotal= sum(LineTotal) from Purchasing.PurchaseOrderDetail D

INNER JOIN Purchasing.PurchaseOrderHeader H ON H.PurchaseOrderID = D.PurchaseOrderID

WHERE VendorID = @VendorID

RETURN (@SumLineTotal)

END

GO

ALTER FUNCTION Purchasing.fn_SumQty (@VendorID int) RETURNS INT

AS

BEGIN

DECLARE @SumQty INT

select @SumQty= sum(cast(OrderQty as int)) from Purchasing.PurchaseOrderDetail D

INNER JOIN Purchasing.PurchaseOrderHeader H ON H.PurchaseOrderID = D.PurchaseOrderID

WHERE VendorID = @VendorID

RETURN (@SumQty)

END

 

Data Loading Performance Guide

 היי , אני קורא לזה... תהליכים ל "מידות גדולות..."

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

בעולם של מערכות מידע ישנם מספר אתגרים כאשר דנים בקונסולידציה של נתונים.

  • שיפור איכות הנתונים.
  • טיוב נתונים.
  • בדיקות מידע.
  • תמיכה בחוקים עסקיים
  • חוסר עקביות של דוחות תפעוליים.
  • גישה ותחקור של Meta data.
  • שיתוף מידע.
  • ניווט במידע.
  • תמיכה ברמות משתמשים שונות.
  • הפצת ושיתוף מידע עסקי.
  • תמיכה ברמות סיכום שונות.
  • תמיכה בתחקור היסטוריות שונות.
  • אינטגרציית נתונים ממקורות מרובים ושונים.
  • איחוד סכמות שונות ומבני נתונים שונים.
  • קישור ישויות מערכת.
  • יצירת מילון מונחים עסקי ומימדים משותפים.
  • תמיכה בקשרים עסקיים משתנים.
  • תמיכה ברמות נתונים שונות.
  • עדכוני נתונים שונים.
  • האצת תחקור המשתמשים.
  • שיפור ביצועי המערכת.

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

DBA, מפתחי BI, מנהלי תחום מחסן הנתונים כל הזמן עסוקים במתן אחריות לנושא זה   J

האם ה DBA  אמון לתהליך שיפור הביצועים או האם מפתח ה BI נדרש לפתח תהליך מיטבי?

האם ה ERD  ואפיון הפיסי תואם את הדרישות?

האם ה DBA שותף לתכנון הפיסי או לתהליכי ה Source To Target ?

טוב, ישנן עשרות שאלות תהליכיות ולצערי גם טריטוריות ולכן לא אעסוק בהן כאן!

אחד המאמרים המצויינים שנכתב ע"י קבוצת SQLCAT הסוקר בהרחבה את כל סוגיות והשיטות הקיימות לניהול מערכי מידע גדולים מאוד , אחד הנושאים האהובים עליי הוא המאפיין ה-א-ג-ד-י Trace Flag 610 (תגלו לבד!).

קישור למאמר

The Data Loading Performance Guide

בהצלחה , תהנו.

No, This Is How You Do It!

החודשים האחרונים הביאו איתם הרבה מאוד חידושים טכנולוגיים. אני מניח שכמעט כולכם שמעתם על .NET 4.0, Enterprise Library 5.0, Azure ועוד אוסף מבלבל של טכנולוגיות, חלקן מוכרות יותר וחלקן פחות.
 
יתכן שלחלקכם היה המזל להשתתף בכנס כזה או אחר שדיבר על הטכנולוגיות והחידושים בעולם ה- .NET, וכנראה שחלקכם לא השתתף בכנס כזה. קיימים כמובן גם בלוגים בנושא, מאמרים, Tweet-ים רבים מספור ועוד.
 
אבל הבעיה העיקרית בכל אלו היא שלרוב מספרים לנו על החידושים המרעישים ועל מה אפשר לעשות איתם, אבל כמעט אף אחד לא מדבר על מה נכון לעשות איתם.
 
ובכן, נאמנים לסלוגן שלנו, שאומר שארכיטקט הוא זה שמסביר מה נכון לעשות עם הטכנולוגיה, ולא מה אפשר לעשות איתה, החלטנו בקבוצת ה- MCS לבנות סדנת ארכיטקטורה שתעשה בדיוק את זה.
בסדנה נציג טכנולוגיות ומגמות חדשות בעולם ה- .NET, וביניהן: Entity Framework 4.0, Enterprise Library 5.0, AppFabric ועוד, ונציג, באמצעות הדגמות חיות את הדרך הנכונה לעשות שימוש בכלים אלו.
בסדנה נענה, למשל, על השאלה: כיצד לבנות מערכת N-Tier מלאה תוך שימוש מושכל ב- Entity Framework 4.0 (ולמה בגרסה 3.5 המשימה היתה קשה בהרבה), או – אם אנו מעוניינים לבנות יישום ל- Cloud, כיצד יהיה נכון לבנות אותו?
 
הסדנה מיועדת לקהל מצומצם – לא יותר מ- 16 משתתפים, במטרה ליצור אווירה אינטימית שתאפשר דיון פתוח וסיעור מוחות אמיתי. הרעיון כאן אינו להעביר הרצאה פרונטלית במשך שעה ורבע לפני מאות מאזינים – אנחנו באמת מעוניינים ליצור אתכם אינטראקציה ולעודד חילופי דעות כמה שיותר פתוחים.
 
אז קדימה – אתם מוזמנים לשלוח לי מייל ולהירשם. ניתן לשלם על הסדנה ישירות או באמצעות שעות MCS, אם יש לארגונכם בנק שעות מתאים.
 

ארכיטקטורה, ביצועים ומה שביניהם

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

1. סוג רכיבי המידע איתם אעבוד באפליקציה
קיימים סוגים שונים של רכיבי מידע (Xml, Dataset, POCO....) - מה היתרונות/חסרונות בהיבטי ביצועים?

XML

מתי?
· כאשר קיים צורך בצימוד נמוך וה caller צריך לקבל/לדעת רק את ה value וה schema
· כאשר קיים צורך לתמוך גם בצרכנים שאינם כתובים ב- dotnet.
· כאשר יש צורך בתמיכה built in ל serialization

בעיות?
· בדרך כלל צורך CPU מכיוון ששליפת נתונים ועדכון מבצעים חיפוש ב – DOM.
· מבנים גדולים צורכים זכרון וכל עיבוד איטי משמעותית.
· דורש casting

Dataset/Typed Dataset

מתי?
· כאשר קיים צורך בתמיכה של מבנה ישויות מורכב
· כאשר קיים צורך בתמיכה של relations מורכבים
· כאשר יש צורך במעקב אחר שינויים על המידע (self-tracking)
· כאשר קיים צורך בתמיכה built in ל serialization

בעיות?
· חתימה גדולה בזכרון.
· נפח גדול בתעבורה ברשת.
· מאפשר לי להעביר רק שינויים – יתרון

POCO

מתי?
· כאשר קיים צורך בתמיכה של מבנה ישויות מורכב
· כאשר שני הצדדים (caller, callee) מכירים את מבנה הישויות
· כאשר יש צורך ב binary serialization עבור ביצועים

2. תקשורת בין שכבות
כאשר אני מפתח מערכת C\S וה – client שלי הוא win application, בדרך כלל, רכיב השרת שלי יכיל שכבת שירותים שתחשוף WCF Services.
אך מה כאשר המערכת שלי היא מערכת אינטרנט ובא שכבת ה – UI שלי וגם רכיבי השרת שלי נמצאים על אותו שרת? האם גם אז התקשורת בין שכבת ה- UI לשכבת השירותים תהיה מבוססת WCF?

יתרונות של תקשורת מבוססת WCF:
- במקרה שנרצה להפריד את השכבה העסקית לשרת נפרד, לא יהיה צורך בשינוי קוד.
חסרונות:
- ביצועים. Reference ישיר מאפשר לי תקשורת ישירה בין רכיבים (in-proc).
[אני בעד הפשטה (אבסטרקציה) שתאפשר לי לבצע מעבר בין 2 האפשרויות, בשינוי קוד מינימלי].

3. Caching
נושא ה- caching נתפס כמשהו שבמהותו הוא משפר ביצועים. אך לא תמיד כך הוא הדבר. תכנון לא נכון של cache יכול לפגוע בביצועים באופן ניכר.
למה להשתמש ב – cache?
- להקטין את מספר הפניות למקור מידע.
- להקטין כמות עיבודים (ע"י כך שנחזיק ב – cache רכיבים "מעובדים").

מה הסיכונים ב- cache?
- ניצול יתר של הזכרון.
- עבודה עם מידע לא מעודכן (במקרה שהמידע במקור המידע השתנה).

אני לא אכנס כאן לדיון מעמיק על מתי נתון נכנס/יוצא מ- cahce, סוגי cache וכו', רק אציין 2 שיקולים מרכזיים המשפיעים על אלו נתונים יוחזקו ב- cache:
- תדירות שינוי הנתונים (נתונים המשתנים בתדירות גבוהה, אולי לא כדאי להחזיק ב- cache).
- תדירות צריכת הנתונים (אעדיף להחזיק ב- cache נתונים שנצרכים יותר).

אלו 3 דוגמאות מאוד בסיסיות על החלטות ארכיטקטוניות/עיצוביות שמאוד משפיעות על ביצועים.

בפוסט הבא, אציג תפיסה שגובשה במיקרוסופט (P&P) הממפה עבור "איזורים" שונים בארכיטקטורה ובעיצוב מערכת את הנקודות שיש להן השלכות בהיבט של ביצועים.

עד אז, בהצלחה.

טל

דינג דונג: זוהי הודעת הבטחה

לא, זו לא שגיאת כתיב. כן, אנחנו מבטיחים לעצמנו קיץ חם ומעניין בקבוצת היועצים!

אני שמח לשתף אתכם במספר עדכונים חדשים:

אנחנו מגייסים!

פתחנו מספר משרות מעניינות בקבוצה:

אם אתם מכירים מישהו שמתאים לאחד מהפרופילים האלו, הרגישו חופשי לשלוח קורות חיים ישירות אליי (תיאום ציפיות – רק פניות מתאימות תקבלנה מענה). {תיאום ציפיות נוסף – סטטיסטית, אחד מתוך כ- 400 מועמדים מתקבל לקבוצה. אנחנו די בררנים… אבל זו רק סטטיסטיקה. מרגישים בטוחים בהתאמה שלכם לאחד התפקידים? נשמח להכיר!}

תנופת הסדנאות ממשיכה!

העברנו כבר סדנת ביצועים בהובלתו של אליק לוין לפני מספר חודשים. בשבוע שעבר יוסי אלקיים העביר סדנה מוצלחת מאד בתחום ה- BI. ראינו כי טוב! אנחנו ממשיכים בתנופה.

בחודשים הקרובים אנחנו מארגנים 6 (!) סדנאות נוספות:

  • מחזור שני של סדנת תשתיות BI יתקיים ב- 6 ליוני.
  • מחזור שני של סדנת ביצועים (תאריך יפורסם בהמשך).
  • סדנה חדשה! Exchange 2010 Architecture & Design (תתקיים בחודש יולי).
  • סדנה חדשה! סדנת ארכיטקטורה (תתקיים בתחילת יוני).
  • סדנה חדשה! סדנת ALM (תתקיים בתחילת יוני).
  • סדנה חדשה! סדנת xRM (תאריך יפורסם בהמשך).

את הסדנאות האלו יובילו היועצים המומחים בתחום. מטרת הסדנאות אינה העברת ידע סטנדרטית בפורמט של קורס אלא שיתוף של ניסיוננו העשיר מהשטח עם באי הסדנה. הפורמט יהיה פורמט אינטימי (עד 15-20 משתתפים), אינטראקטיבי (הרבה מקום לשאלות ותשובות) ובעיקר – פרקטי (קצת פחות תיאוריה, הרבה יותר ניסיון מעשי מהפרויקטים הגדולים ביותר בתעשייה, פרויקטים בהם אנחנו שותפים).

ניתן לשלם על הסדנאות בנפרד או על ידי שימוש בשעות MCS במידה ולארגונכם יש בנק שעות קיים אצלנו.

במידה ואחת מהסדנאות מדברת אליכם, אל תהססו לפנות אלינו לקבלת פרטים נוספים.

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

TFS 2010 cheat sheets

 

לאחרונה הושק Visual Studio 2010 ואיתו כמובן גם TFS2010. בכדי לסייע לכם לקפוץ ישר למים, קבוצת ה- Visual Studio ALM Rangers פרסמה את ה- Visual Studio 2010 Quick Reference Guidance . שם ניתן למצוא הסברים פשוטים וממוקדים על היכולות החדשות של VS2010, קצת ALM ו- TFS Deployment.

תהנו...