<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">מאחורי המסך</title><subtitle type="html">משה למפרט, על תכנות מתקדם וביצועים ב-Web.</subtitle><id>http://blogs.microsoft.co.il/blogs/moshel/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/moshel/" /><link rel="self" type="application/atom+xml" href="http://blogs.microsoft.co.il/blogs/moshel/atom.aspx" /><generator uri="http://communityserver.org" version="3.1.20917.1142">Community Server</generator><updated>2010-10-05T09:18:00Z</updated><entry><title>MySQL Workbench מול SSMS: מצא את ההבדלים</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2011/12/17/mysql-workbench-ssms.aspx" /><id>http://blogs.microsoft.co.il/blogs/moshel/archive/2011/12/17/mysql-workbench-ssms.aspx</id><published>2011-12-17T16:28:56Z</published><updated>2011-12-17T16:28:56Z</updated><content type="html">&lt;p&gt;בשבוע האחרון שדרגתי את תוכנת MySQL Workbench לגירסתה האחרונה (5.2.36). מעבר לחידושים שהוכנסו לשם (הגרפיים, ותיקוני הבאגים), אפשר לשים לב בעיקר לנסיון להתקרב למראה הכללי של התוכנה המקבילה עבור&amp;#160; SQL Server&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_73882A4F.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_20D99A53.png" width="244" height="188" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_256FA50D.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_7440449F.png" width="244" height="188" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;הגירסא החדשה של המוצר הזה משפרת את היציבות והופכת את הכלי להרבה יותר פונקציונלי ונוח לשימוש. &lt;/p&gt;  &lt;p&gt;המסך הראשי שבו כותבים ומריצים שאילתות SQL השתנה בצורה משמעותית. הדבר הראשון – ביטול ההבדל בין הטאבים למעלה (השאילתות) לטאבים למטה (התוצאות) שעבדו בצורה קצת מוזרה בגירסה הקודמת, בין השאר, הם מאפשרים עריכה של תוצאות של בקשות SQL (יותר מתוחכם מה&amp;quot;Edit 200 Rows&amp;quot; של SSMS או Edit של הגירסא הקודמת של MSW).   &lt;br /&gt;מסכי עריכת הטבלאות, שבגירסא&amp;#160; הקודמת היו תיבות דו שיח, הפכו לטאבים בחלון הראשי, גם כן כמו SSMS. חבל שאין אפשרות להחזיר את המצב הקודם כשיש צורך כזה.&lt;/p&gt;  &lt;p&gt;בכלל, החבר&amp;#39;ה של MySQL עושים בשנים האחרונות מאמצים רבים להפוך את הכלים שלהם יותר ידידותיים למשתמשים (לא רק מסך CLI שחור ומאיים), בדגש על משתמשי חלונות, לאחר שלפני כמה שנים הם גילו שלמרות התדמית של הקוד הפתוח,הרוב המוחלט של המשתמשים שלהם &lt;a href="http://www.mysql.com/why-mysql/windows/" target="_blank"&gt;משתמשים בכלל בחלונות&lt;/a&gt;, אם לפיתוח ואם לסביבת ייצור.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=960314" width="1" height="1"&gt;</content><author><name>Moshe L</name><uri>http://blogs.microsoft.co.il/members/Moshe-L.aspx</uri></author><category term="DEV" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/DEV/default.aspx" /><category term="MySQL" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/MySQL/default.aspx" /><category term="SQL Server" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/SQL+Server/default.aspx" /></entry><entry><title>ערוץ 2 "מגלה": גם לנוער הגבעות יש אינטרנט</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2011/12/14/2-quot-quot.aspx" /><id>http://blogs.microsoft.co.il/blogs/moshel/archive/2011/12/14/2-quot-quot.aspx</id><published>2011-12-14T21:37:15Z</published><updated>2011-12-14T21:37:15Z</updated><content type="html">&lt;p&gt;היכולת להפיץ מידע לכמות גדולה של גולשים בזמן קצר הוכיחה את עצמה שוב השבוע כשלאורך אחר הצהריים והערב פורסמו בפורומים, באתר הקול היהודי (השופר של יצהר והסביבה), ובהמשך גם בערוץ 7 פרסומים על &lt;a href="http://www.inn.co.il/News/News.aspx/230142" target="_blank"&gt;חשש להרס מאחזים בלילה שבין יום שני לשלישי&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;סיוון רהב מאיר מערוץ 2 עשתה כתבה על פורום &lt;a href="http://www.inn.co.il/Forum/Forum.aspx/f50" target="_blank"&gt;ארץ מולדת&lt;/a&gt; אצלנו בערוץ 7, ועל השימושיות של הכלים האלה כשדרוג ביכולת להפרעה לכוחות הגירוש בדרך להריסת עוד מאחז או לכל פעולה שלטונית אחרת.&lt;/p&gt;  &lt;p&gt;&lt;iframe height="315" src="http://www.youtube.com/embed/WVFDe-uuaNM" frameborder="0" width="420"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;מדי פעם ערוץ 7 מקבלים צווים לחשיפת כתובות IP של גולשים. עד היום, הצווים הללו העלו חרס בידם. במקרה אחד לפחות ה-IP היה שייך למוסד חינוכי עם עשרות ומאות מחשבים, ובשאר המקרים כנראה פשוט לא הייתה עילה פלילית (חוץ מטעם רע של כותב ההודעה, שבד&amp;quot;כ נמחקה דקות מספר אחר כך).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;למען הסר ספק, אני לא מתומכיה של ההפגנה האלימה שהייתה בחטמ&amp;quot;ר אפרים (שם, על פי דיווחי הגולשים בפורומים, היה מי שהכין פלוגות מג&amp;quot;ב וטרקטור כדי להרוס מאחז) או הפגנות אלימות בכלל.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=957405" width="1" height="1"&gt;</content><author><name>Moshe L</name><uri>http://blogs.microsoft.co.il/members/Moshe-L.aspx</uri></author><category term="אינטרנט" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D005D905E005D805E805E005D805_/default.aspx" /><category term="גולשים" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D205D505DC05E905D905DD05_/default.aspx" /><category term="OffTopic" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/OffTopic/default.aspx" /><category term="פרטיות" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_E405E805D805D905D505EA05_/default.aspx" /></entry><entry><title>slimtune: כלי ניתוח ביצועים (Profiler) לסביבת .NET</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2011/11/30/slimtune-profiler-net.aspx" /><id>http://blogs.microsoft.co.il/blogs/moshel/archive/2011/11/30/slimtune-profiler-net.aspx</id><published>2011-11-30T10:31:51Z</published><updated>2011-11-30T10:31:51Z</updated><content type="html">&lt;p&gt;תוך כדי שיטוט ב-History של MySQLConnector לסביבת NET., נתקלתי בכלי הפשוט הבא בקוד פתוח עבור בדיקות ביצועים של רכיבי קוד.&lt;/p&gt;  &lt;p&gt;נשמע מעניין.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://code.google.com/p/slimtune/" href="http://code.google.com/p/slimtune/"&gt;http://code.google.com/p/slimtune/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=944101" width="1" height="1"&gt;</content><author><name>Moshe L</name><uri>http://blogs.microsoft.co.il/members/Moshe-L.aspx</uri></author></entry><entry><title>HebMorph–חיפוש מורפולוגי עברי. סיקור ושימוש ב-Production</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2011/09/22/hebmorph-production.aspx" /><id>http://blogs.microsoft.co.il/blogs/moshel/archive/2011/09/22/hebmorph-production.aspx</id><published>2011-09-22T19:48:08Z</published><updated>2011-09-22T19:48:08Z</updated><content type="html">&lt;p&gt;ביום שלישי האחרון השתתפתי בערב מעניין (ישר כח למארגנים) שהיה במרכז המחקר והפיתוח של Microsoft בהרצליה.    &lt;br /&gt;אחת ההרצאות שם הייתה על כלי מעניין בשם &lt;a href="http://hebmorph.code972.com/" target="_blank"&gt;HebMorph&lt;/a&gt;, שהוא תוסף ל-Lucene/&lt;a href="http://incubator.apache.org/lucene.net/" target="_blank"&gt;Lucene.net&lt;/a&gt; עבור חיפושים מורפולוגיים בעברית.     &lt;br /&gt;לאחר ההרצאה שוחחתי קצרות עם &lt;a href="http://www.code972.com/blog/" target="_blank"&gt;איתמר&lt;/a&gt;, המרצה והמפתח, וסיפרתי לו שהכלי שלו נותן תוצאות מצויינות אבל הביצועים שלו בעייתיים.&lt;/p&gt;  &lt;p&gt;איתמר חייך, אמר לא יכול להיות ואולי טעינו בכמה דברים ונתן כמה רעיונות. אחר כך כבר נכנסנו למצגת הבאה ולזו שאחריה (זו על ה-nodejs) שזה תחום שמסקרן אותי – ולא מהיום.&lt;/p&gt;  &lt;p&gt;למחרת בבוקר התיישבתי במשרד והחלטתי לחקור את הנושא לעומקו.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;בדיקה 1:&lt;/strong&gt; שימוש בכלים המובנים של Lucene     &lt;br /&gt;השתמשתי במחשב לא מזהיר במיוחד. מכונה עם מעבד 4 ליבות, 4G זיכרון, דיסק קשיח SATA בסיסי.     &lt;br /&gt;המערכת מאפשרת לאנדקס בערך כ-1000 מסמכים בשניה (מאגר ה&lt;a href="http://www.inn.co.il" target="_blank"&gt;חדשות&lt;/a&gt; של ערוץ 7)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;בדיקה 2:&lt;/strong&gt; שימוש ב-HebMorph, שאר הקוד ללא שינוי.    &lt;br /&gt;100-150 מסמכים בשניה.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;בדיקה 3:&lt;/strong&gt; שימוש ב-SimpleAnalyzer, גם כן מהחבילה של איתמר.    &lt;br /&gt;950~ מסמכים בשניה&lt;/p&gt;  &lt;p&gt;מעקב אחר מנהל המשימות מראה שהכלי הקטן שפיתחתי, הן על בסיס&amp;#160; Lucene והן על בסיס HebMorph/SimpleAnalyzer סובל מ-2 בעיות ביצועים מרכזיות:    &lt;br /&gt;- ניצול של מעבד אחד בלבד (מתוך 4 ליבות)     &lt;br /&gt;- אי ניצול יעיל של זיכרון&lt;/p&gt;  &lt;p&gt;עם בעיית הזיכרון התמודדתי ע&amp;quot;י פיצול למנות (LIMIT של MySQL) של התוכן שמגיע מבסיס הנתונים, ופקודות GC.Collect ששמתי פה ושם.   &lt;br /&gt;על הדרך, גיליתי שהאיטיות הזו גרמה גם ל-Paging שבתורו גרר עוד יותר איטיות. &amp;quot;חיתוך&amp;quot; כמויות הנתונים איתם עבדתי שיפרו את המצב פלאים.&lt;/p&gt;  &lt;p&gt;בעיית ה-CPU הייתה מורכבת יותר. הבעיה היא ש-IndexWriter פשוט לא מאפשר עבודה במקביל על אותו אינדקס. אמנם זה עבד לי מצויין בעבר אבל זה לא נתמך ואי אפשר לדעת איזה צרות זה יעשה.&lt;/p&gt;  &lt;p&gt;קצת חפירה ברשת וקצת השקעה בקוד, ופיתחתי בסוף את הפיתרון הבא:&lt;/p&gt;  &lt;pre&gt;&lt;p&gt;Dim oMem1 As Indexer = New HebrewIndexer(100)&lt;br /&gt;&lt;br /&gt;Dim oMem2 As Indexer = New HebrewIndexer(100)&lt;br /&gt;&lt;br /&gt;Dim oMem3 As Indexer = New HebrewIndexer(100)&lt;/p&gt;&lt;p&gt;Dim count As Integer = a.Length / 3&lt;br /&gt;&amp;#39;                                           array    indexer  start, end
&lt;br /&gt;Dim t1 As New Tasks.Task(Sub() _IndexDocuments(a, 0, oMem1, 0, count - 1))
&lt;br /&gt;Dim t2 As New Tasks.Task(Sub() _IndexDocuments(a, 1, oMem2, count, count * 2 - 1))
&lt;br /&gt;Dim t3 As New Tasks.Task(Sub() _IndexDocuments(a, 2, oMem3,  count * 2, a.Length - 1))&lt;/p&gt;&lt;p&gt;t1.Start() : t2.Start() : t3.Start()&lt;/p&gt;
&lt;p&gt;Tasks.Task.WaitAll(New Tasks.Task() {t1, t2, t3})&lt;/p&gt;

&lt;p&gt;Dim t4 As New Tasks.Task(Sub()&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oMem1.Flush() : oMem2.Flush() : oMem3.Flush()
&lt;/p&gt;&lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Indexer.AddIndex(oMem1.Directory)
&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Indexer.AddIndex(oMem2.Directory)
&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Indexer.AddIndex(oMem3.Directory)

&lt;/p&gt;&lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oMem1.Directory.Dispose() : oMem2.Directory.Dispose() : oMem3.Directory.Dispose()
 &lt;br /&gt;             GC.Collect() &amp;#39; אני לא חד-משמעי בקשר לצורך בפונקציה הזו
  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; End Sub)&lt;/p&gt;&lt;p&gt;t4.Start()&lt;/p&gt;&lt;/pre&gt;

&lt;p&gt;(הוצאתי מפה הרבה שורות שלא קשורות לעניין, ומחלקות שבניתי שגם הן לא קשורות. וכן, אני יודע שיש שיטות חכמות יותר לכתוב את הקוד הזה)
  &lt;br /&gt;הפונקציה AddIndex היא בעצם הפנייה לפונקציה AddIndexesNoOptimize&amp;#39; של IndexWriter&lt;/p&gt;

&lt;p&gt;הרעיון שפיתחתי לאחר שעות ארוכות הוא לייצר שלושה אינדקסים זמניים, בזיכרון, להכניס לתוכם את התוכן בשלושה Threadים שונים, ואחר כך לשלב את האינדקסים המוכנים באינדקסים הראשיים. 
  &lt;br /&gt;

  &lt;br /&gt;מכיוון שגם גישה לבסיס נתונים לוקחת זמן, התהליך של מיזוג האינדקסים קורה ב-Task רביעי (t4), כשבינתיים האפליקציה ממשיכה לרוץ ולוקחת מבסיס הנתונים את המידע הנחוץ להכנסה הבאה.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;יש עוד לא מעט עבודה שאפשר לעשות בשלב החיפוש (להבדיל משלב&amp;#160; האינדוקס), אבל זה כבר לפעם אחרת.&lt;/p&gt;

&lt;p&gt;בהצלחה!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=904279" width="1" height="1"&gt;</content><author><name>Moshe L</name><uri>http://blogs.microsoft.co.il/members/Moshe-L.aspx</uri></author><category term="ASP.net" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/ASP.net/default.aspx" /><category term="ביצועים" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D105D905E605D505E205D905DD05_/default.aspx" /><category term="HebMorph" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/HebMorph/default.aspx" /><category term="Lucene.net" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/Lucene.net/default.aspx" /></entry><entry><title>מישהו בלבל בין האייקונים ב-Task Scheduler של חלונות</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2011/09/22/task-scheduler.aspx" /><id>http://blogs.microsoft.co.il/blogs/moshel/archive/2011/09/22/task-scheduler.aspx</id><published>2011-09-22T18:33:23Z</published><updated>2011-09-22T18:33:23Z</updated><content type="html">&lt;p&gt;הנה ב-Windows Server 2008 R2&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_75110D68.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_62A8BCB3.png" width="153" height="237" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;ומסתבר שזה קיים גם ב-Windows 7.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_7D5558CC.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_3F3C3E1B.png" width="186" height="260" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;גם זה קורה לפעמים.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=904252" width="1" height="1"&gt;</content><author><name>Moshe L</name><uri>http://blogs.microsoft.co.il/members/Moshe-L.aspx</uri></author><category term="Windows Server 2008" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/Windows+Server+2008/default.aspx" /><category term="OffTopic" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/OffTopic/default.aspx" /></entry><entry><title>הלקוח מתלונן על איטיות בעדכון תכנים, "אצלי זה עובד". ובסוף הפיתרון</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2011/09/15/quot-quot.aspx" /><id>http://blogs.microsoft.co.il/blogs/moshel/archive/2011/09/15/quot-quot.aspx</id><published>2011-09-15T20:13:35Z</published><updated>2011-09-15T20:13:35Z</updated><content type="html">&lt;p&gt;מעשה (אמיתי) שהיה לפני מס&amp;#39; חודשים:&lt;/p&gt;  &lt;p&gt;עוזי ברוך (מנהל מחלקת החדשות של ערוץ 7) מתקשר ומתלונן: העלתי מבזק, והוא לא פורסם בזמן. עוברים יומיים, ושוב אותה תלונה, ושוב ושוב ושוב מאנשי צוות שונים – חומרים עולים לאתר באיחור.    &lt;br /&gt;את המבזק הבא אני מבקש להעלות בעצמי. מעמדת הפיתוח. מקבל את הטקסט ב-Messenger, מעתיק, ומדביק מול עיניהם. עובד.     &lt;br /&gt;אבל החבר&amp;#39;ה בחדשות ממשיכים להתלונן. אני בינתיים נובר כמו משוגע בכל רכיבי המטמון במערכת ומוודא שהם נמחקים (flush) כשנצרך. שום דבר.&lt;/p&gt;  &lt;p&gt;עוברים חודשיים בהם אני סובל מטלפונים והודעות מתלוננות, עד שמצאתי את הבעיה האמיתית:&lt;/p&gt;  &lt;p&gt;באחד הערבים, עבדתי מהבית עם RDP על אחד המחשבים במשרד, ופתאום אני קולט שיש פער זמנים בין המחשב שלי למחשב המרוחק. חמש דקות נוספות של בדיקה העלו שפשוט השעון של ה-DC, ואיתו כל המחשבים במשרד -&amp;#160; ממהר!&lt;/p&gt;  &lt;p&gt;בהיעדר מנהל רשת, התחברתי לשרת המתאים, הגדרתי שם שרת NTP ובזה נגמר העניין. לו רק יכולתי לחסוך חודשיים של סבל.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;padding-top:0px;" border="0" src="http://a7.org/pictures/76/76573.jpg" alt="" /&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=901247" width="1" height="1"&gt;</content><author><name>Moshe L</name><uri>http://blogs.microsoft.co.il/members/Moshe-L.aspx</uri></author><category term="שגיאות" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_E905D205D905D005D505EA05_/default.aspx" /><category term="ITPRO" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/ITPRO/default.aspx" /></entry><entry><title>Cache עם Lock מבוסס memcached</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2011/05/28/cache-lock-memcached.aspx" /><id>http://blogs.microsoft.co.il/blogs/moshel/archive/2011/05/28/cache-lock-memcached.aspx</id><published>2011-05-28T20:13:58Z</published><updated>2011-05-28T20:13:58Z</updated><content type="html">&lt;p&gt;בעבר כתבתי על הבעיה הלא מאוד לא נפוצה שנגרמת כאשר משום מה מתבצעת פעולת Flush לחלקים גדולים של ה-Cache.    &lt;br /&gt;מערכת שביום יום מתמודדת בהצלחה עם העומס ונותנת זמני תגובה מצויינים, מגמגמת ואף קורסת לדקות ארוכות בשעה שה-Cache עליו היא מתבססת או חלקים ממנו קרס.&lt;/p&gt;  &lt;p&gt;לפני קצת פחות משנתיים כתבתי על &lt;a title="Cache עם Lock" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2009/07/11/cache.aspx" target="_blank"&gt;פתרון פשוט&lt;/a&gt; שמטרתו הייתה למנוע הרצת אותה פעולה מאות אלפי פעמים עד שנכנס ל-Cache אחד העותקים לשימוש בפעמים הבאות.&lt;/p&gt;  &lt;p&gt;הפיתרון עבד מאוד יפה כל עוד נמצאים באותו שרת, ובאותו Proccess של IIS. גם במקרים שלא, הפעולה צומצמה מאלפים של בקשות מקבילות לכמה עשרות, בתלות בהגדרות הרשת.    &lt;br /&gt;ובכל זאת רציתי לפתח פתרון אחר.     &lt;br /&gt;זה לא&amp;#160; Lock מושלם ב-100%, ובכל זאת, עושה את העבודה ומאיץ משמעותית את זמני עליית האתר מחדש אחרי Recycle או אבדן של חלקים משמעותיים ב-Cache.&lt;/p&gt;  &lt;p&gt;הקוד פשוט מאוד וההערות שבתוכו די מיותרות.&lt;/p&gt;  &lt;pre style="width:543px;height:478px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Public Shared Function GetFromCacheWithLock(Of T)(ByVal Name As String, ByVal Minutes As Integer, ByVal SecondsLock As Integer, ByVal Func As Func(Of T)) As T&lt;br /&gt;             Try&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#39; אם מישהו אחר באמצע&lt;br /&gt;                  While GetCache(&amp;quot;MainFuncs.GetCache.Lock&amp;quot; &amp;amp; Name) = 1&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#39; כל עוד הפעולה רצה, תחכה&lt;br /&gt;                      Threading.Thread.Sleep(30)&lt;br /&gt;                 End While&lt;br /&gt;                  InsertCache(&amp;quot;MainFuncs.GetCache.Lock&amp;quot; &amp;amp; Name, 1, New TimeSpan(0, 0, SecondsLock)) &amp;#39; &amp;quot;נעל&amp;quot; את  הפעולה &lt;br /&gt;

                 Return GetFromCache(Name, Minutes, Func) &lt;br /&gt;              Finally &lt;br /&gt;                 RemoveCache(&amp;quot;MainFuncs.GetCache.Lock&amp;quot; &amp;amp; Name) &amp;#39; הסר נעילה&lt;br /&gt;
             End Try&lt;br /&gt;          End Function  &lt;br /&gt;  &lt;br /&gt;         Public Shared Function GetFromCache(Of T)(ByVal Name As String, ByVal Minutes As Integer, ByVal Func As Func(Of T), Optional ByVal Priority As Web.Caching.CacheItemPriority = CacheItemPriority.Default) As T &lt;br /&gt;              Return GetFromCache(Of T)(Name, New System.TimeSpan(0, Minutes, 0), Func, Priority)&lt;br /&gt;          End Function&lt;br /&gt;          Public Shared Function GetFromCache(Of T)(ByVal Name As String, ByVal Span As TimeSpan, ByVal Func As Func(Of T), Optional ByVal Priority As Web.Caching.CacheItemPriority = CacheItemPriority.Default) As T&lt;br /&gt;              Dim s As T
&lt;br /&gt;             Dim z As Object = MemCacheClient.Get(Name)&lt;br /&gt;              If z Is Nothing Then &amp;#39; אם אין במטמון, להריץ את הפעולה     &lt;br /&gt;                   s = Func()&lt;br /&gt;                  InsertCache(Name, s, Span)&lt;br /&gt;                 Return s&lt;br /&gt;             Else&lt;br /&gt;                 Return z&lt;br /&gt;             End If&lt;br /&gt;         End Function&lt;/pre&gt;

&lt;p&gt;בהצלחה !&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=838303" width="1" height="1"&gt;</content><author><name>Moshe L</name><uri>http://blogs.microsoft.co.il/members/Moshe-L.aspx</uri></author><category term="Cache" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/Cache/default.aspx" /><category term="ASP.net" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/ASP.net/default.aspx" /><category term="ביצועים" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D105D905E605D505E205D905DD05_/default.aspx" /><category term="DEV" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/DEV/default.aspx" /><category term="lock-cache-with-memcached" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/lock-cache-with-memcached/default.aspx" /></entry><entry><title>דפדפן נייד ראשון שיתמוך ב-contentEditable: הוא Firefox Mobile</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2011/04/09/contenteditable-firefox-mobile.aspx" /><id>http://blogs.microsoft.co.il/blogs/moshel/archive/2011/04/09/contenteditable-firefox-mobile.aspx</id><published>2011-04-09T20:18:11Z</published><updated>2011-04-09T20:18:11Z</updated><content type="html">&lt;p&gt;סוד גלוי הוא שהדפדפנים למכשירים ניידים (וזה כולל את Safari/Chrome למכשירי iOS ו-Android), את דפדפני Opera למינהם ולמיטב ידיעתי – גם IE9 הנייד.   &lt;br /&gt;זו גם הסיבה לאכזבתו של אחד מכתבי ערוץ 7 שרכש לעצמו iPad כמיני נייד (חרף אזהרותיי, אגב – אני המלצתי על PC) וגילה לאכזבתו שבמכשיר המדליק עריכת כתבות עליו היא עניין לא נוח במיוחד וגם מוגבל.&lt;/p&gt;  &lt;p&gt;הערב נחשפתי במקרה ליציאתו לשוק של הדפדפן החדש של&amp;#160; Firefox לניידים, שמבוסס על Firefox 4. חיפוש קצר נוסף העלה כי הדפדפן לנייד אכן תומך ב-contentEditable, וממילא עורכי טקסט המבוססים עליו יעבדו.&lt;/p&gt;  &lt;p&gt;חידוש מרענן.&lt;/p&gt;  &lt;p&gt;הבלוג המקורי שבדק את זה:   &lt;br /&gt;&lt;a title="http://ckon.wordpress.com/2011/03/29/firefox-4-mobile-wysiwyg-contenteditable-designmode/" href="http://ckon.wordpress.com/2011/03/29/firefox-4-mobile-wysiwyg-contenteditable-designmode/"&gt;http://ckon.wordpress.com/2011/03/29/firefox-4-mobile-wysiwyg-contenteditable-designmode/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=817343" width="1" height="1"&gt;</content><author><name>Moshe L</name><uri>http://blogs.microsoft.co.il/members/Moshe-L.aspx</uri></author><category term="Firefox" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/Firefox/default.aspx" /><category term="DEV" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/DEV/default.aspx" /><category term="דפדפנים" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D305E405D305E405E005D905DD05_/default.aspx" /></entry><entry><title>IE9: אין יותר זבל ב-User Agent. פרטיות וביצועים</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2011/03/21/ie9-user-agent.aspx" /><id>http://blogs.microsoft.co.il/blogs/moshel/archive/2011/03/21/ie9-user-agent.aspx</id><published>2011-03-21T18:29:39Z</published><updated>2011-03-21T18:29:39Z</updated><content type="html">&lt;p&gt;גירסאות קודמות של IE איפשרו לתוכנות המותקנות במחשב (הנפוצות שבהן: .NET Framework, אבל גם אחרים) לשנות את ה-User Agent שנשלח לשרת.&lt;/p&gt;  &lt;p&gt;פרט לבעיית ביצועים זניחה (סתם עוד טקסט מיותר שנשלח עם כל בקשת HTTP), גילה כנראה מי שגילה את התכונה הזו כדרך &amp;quot;לבודד&amp;quot; משתמשים, לאור העובדה הפשוטה שכל מחשב הכיל User Agent מעט שונה.&lt;/p&gt;  &lt;p&gt;ישר כח !&lt;/p&gt;  &lt;p&gt;&lt;a title="Default User-Agent (UA) String Changed" href="http://msdn.microsoft.com/en-us/library/ff986085(v=VS.85).aspx"&gt;Default User-Agent (UA) String Changed&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=812092" width="1" height="1"&gt;</content><author><name>Moshe L</name><uri>http://blogs.microsoft.co.il/members/Moshe-L.aspx</uri></author><category term="Internet Explorer" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/Internet+Explorer/default.aspx" /><category term="דפדפנים" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D305E405D305E405E005D905DD05_/default.aspx" /><category term="פרטיות" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_E405E805D805D905D505EA05_/default.aspx" /><category term="ie9-user-agent" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/ie9-user-agent/default.aspx" /></entry><entry><title>נתח שוק לדפדפנים בישראל - פורים תשע"א</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2011/03/17/purim710browsers.aspx" /><id>http://blogs.microsoft.co.il/blogs/moshel/archive/2011/03/17/purim710browsers.aspx</id><published>2011-03-17T17:04:06Z</published><updated>2011-03-17T17:04:06Z</updated><content type="html">&lt;p&gt;מדי כמה חודשים אני מפרסם פה את נתח השוק של הדפדפנים בישראל, כפי שנאגרו על ידי אתר האינטרנט של ערוץ 7. למיטב ידיעתי – אין עוד אתר אינטרנט גדול (שאינו טכני) ישראלי שמפרסם את הפרטים האלה.   &lt;br /&gt;הסטטיסטיקה של הנכנסים לבלוג הזה למשל, היא שונה בתכלית.&lt;/p&gt;  &lt;p&gt;נתח שוק של דפדפנים:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_53EC1BF9.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_23759783.png" width="534" height="251" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;נתח שוק של גירסאות IE:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_60B64C4A.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_37CB3741.png" width="525" height="279" /&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;נתח שוק של גירסאות Chrome:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_7C975B75.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_214872ED.png" width="510" height="313" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;נתח שוק של גירסאות Firefox:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_5EF55AA9.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_5CD85BE0.png" width="553" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;כמו בפעמים שעברו, Firefox ו-Chrome מוחקים מהר מהר את הגירסאות הישנות, ובמהירות הן צוללות אל תחתית הנתונים הסטטיסטיים.&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;לצורך השוואת פרופורציות, סטטיסטיקת הדפדפנים לבלוג הזה שונה לחלוטין:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_0BDA97B8.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_69A28C31.png" width="530" height="289" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=807944" width="1" height="1"&gt;</content><author><name>Moshe L</name><uri>http://blogs.microsoft.co.il/members/Moshe-L.aspx</uri></author><category term="Firefox" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/Firefox/default.aspx" /><category term="Internet Explorer" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/Internet+Explorer/default.aspx" /><category term="DEV" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/DEV/default.aspx" /><category term="דפדפנים" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D305E405D305E405E005D905DD05_/default.aspx" /><category term="Chrome" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/Chrome/default.aspx" /></entry><entry><title>IE9 RC1–התנסות ומסקנותיה</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2011/02/19/ie9-rc1.aspx" /><id>http://blogs.microsoft.co.il/blogs/moshel/archive/2011/02/19/ie9-rc1.aspx</id><published>2011-02-19T19:05:00Z</published><updated>2011-02-19T19:05:00Z</updated><content type="html">&lt;p&gt;אני חובב וותיק של Internet Explorer. כל הניסיונות השונים של חברים ומפתחים במהלך השנים לשכנע אותי לעבור לדפדפן אחר עלו בתוהו. בתור מפתח Web יצא לי לעבוד כמעט על כל דפדפן מאז IE4, כולל Netscape ז&amp;quot;ל (4 ו-6), Firefox עוד בתור Firebird, ועל לינוקס Konqueror וכשיצא ל-Windows גם Safari ובהמשך Chrome.&lt;/p&gt;  &lt;p&gt;לכל אחד היו היתרונות והחסרונות שלו בתהליך הפיתוח (למשל Firebug) אבל כדפדפן גלישה משום מה היה ונשאר שם &lt;a href="http://www.avantbrowser.com/" target="_blank"&gt;Avant Browser&lt;/a&gt;, שהוא בעצם מעטפת יפה ומוצלחת ל-IE.&lt;/p&gt;  &lt;p&gt;מיד אחרי ששמעתי על יציאת גירסא RC1, מיהרתי להוריד ולהתקין אותה, ואלו הרשמים שלי:&lt;/p&gt;  &lt;p&gt;1. חווייה - המערכת מהירה יותר בתחושה (גם בהשוואה ל-Chrome), יציבה משמעותית מהגרסה שקדמה לה ובאופן עקרוני – כיף לעבוד עליה.   &lt;br /&gt;יש עוד על מה לעבוד בגיזזרת הביצועים, אבל השיפור ניכר בהחלט, גם בצריכת הזיכרון של הדפדפן לאחר ימים ושבועות של עבודה.    &lt;br /&gt;בנוסף ניתן לראות שינויים בעיצוב ביחס לגרסת ה-Beta, והוספת פונקציות ברכיבים שונים של הדפדפן על פי בקשות של גולשים    &lt;br /&gt;אני מנחש שלכרטיס המסך יש השפעה ניכרת בנידון, אבל כרטיסי מסך נורמליים יש היום כמעט בכל מחשב.    &lt;br /&gt;Ctrl+Shift+L – &amp;quot;הדבק&amp;quot; כתובת/ביטוי לשורת הכתובת והיכנס אליה או חפש את הביטוי. שימושי להפליא. לא הצלחתי להבין מתי תתחלף הכתובת שבחלון ומתי הוא יפתח דווקא טאב חדש, אבל עדיין – נחמד.    &lt;br /&gt;Ctrl+Shift+N – העברת הטאב הפעיל לחלון חדש. שימושי לעיתים כשיש שני מסכים למחשב.&lt;/p&gt;  &lt;p&gt;2. פיתוח – כלי הפיתוח של IE9 RC1 עובדים בצורה דומה לאלו שבגרסה שקדמה לו. חשוב לציין שיפור קטן (בתחושה!) בביצועים אולם מדובר עדיין בכלי איטי וכבד, בדומה ל-Firebug שהופך כל ריענון או שינוי בדף לאיטי מעט.   &lt;br /&gt;הטאב &amp;quot;רשת&amp;quot; שהתווסף מאפשר לעקוב אחרי הבקשות בדומה ל-Firebug ו-Chrome עושה עבודה יפה, על אף שאני בד&amp;quot;כ מעדיף את Fiddler עבור ניתוח בקשות HTTP לאור יכולותיו העדיפות.&lt;/p&gt;  &lt;p&gt;3. באגים - אמנם מדובר בגירסת RC, אולם נתקלתי בבאגים מרכזיים במנוע ה-JS של הדפדפן, כאלו שאינם מאפשרים בכלל גלישה במס&amp;#39; לא מבוטל של אתרים (למשל CKEditor המוטמע באתר ערוץ 7 אינו פועל בכלל). מעבר למנוע IE8 עוקף את הבעיה אבל גם הופך את הדפדפן לאיטי יותר.   &lt;br /&gt;Geolocation לא הביא אותי לשום מקום (כולל לא למשרדי ספקית האינטרנט שלי). על הדרך גיליתי ש-&amp;quot;Bing&amp;quot; לא מכיל מפות בכלל באזור מגוריי או ביהודה ושומרון בכלל.    &lt;br /&gt;בגופן Arial העברי ניתן לראות לעיתים מיקום לא נכון של טקסט באנגלית בתוך טקסט בעברית – תמוה.    &lt;br /&gt;&lt;strong&gt;אין אפשרות לבטל את-Clear Type ואת המימוש שלו ב-IE9&lt;/strong&gt;, טיפוסים כמוני שמעדיפים את הטקסט חד ולא מוחלק לא יכולים. גם השינוי המתאים בהגדרות לא עזר.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;יש להם עוד הרבה עבודה לחבר&amp;#39;ה של IE, אבל זה נראה שהם בכיוון הנכון.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=793778" width="1" height="1"&gt;</content><author><name>Moshe L</name><uri>http://blogs.microsoft.co.il/members/Moshe-L.aspx</uri></author><category term="Internet Explorer" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/Internet+Explorer/default.aspx" /><category term="באגים" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D105D005D205D905DD05_/default.aspx" /><category term="DEV" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/DEV/default.aspx" /><category term="דפדפנים" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D305E405D305E405E005D905DD05_/default.aspx" /></entry><entry><title>MySQL: איטיות בפעולות LIMIT גדולות | Slow large Limit offsets</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2011/02/01/mysql-limit-slow-large-limit-offsets.aspx" /><id>http://blogs.microsoft.co.il/blogs/moshel/archive/2011/02/01/mysql-limit-slow-large-limit-offsets.aspx</id><published>2011-02-01T21:31:00Z</published><updated>2011-02-01T21:31:00Z</updated><content type="html">&lt;p&gt;(הפוסט רלוונטי במידה מסויימת גם ל-SQL Server)    &lt;br /&gt;&lt;a title="חלוקה לדפים, SQL Paging" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2009/12/20/smart-sql-paging.aspx" target="_blank"&gt;בעבר הדגמתי&lt;/a&gt; כיצד ניתן לבצע חלוקה לדפים ביעילות בMySQL וב-SQL Server, גם כשהטבלאות עליהן עובדים הולכות ומתנפחות.&lt;/p&gt;  &lt;p&gt;נתקלתי לא אחת במקרה בו הגולש (או המקרה הנפוץ יותר – &lt;strong&gt;מנוע חיפוש&lt;/strong&gt;), מתחיל לרוץ על הדפים ומגיע לדף ה-1000 ויותר.     &lt;br /&gt;במקרה כזה, מסד הנתונים צריך לעבור על כל הטבלה עד לשלב שאליו הוא הגיע. פעולה יקרה, איטית וזוללת משאבים     &lt;br /&gt;תרשו לי להציע פיתרון אחר.&lt;/p&gt;  &lt;p&gt;ניקח לדוגמא את השליפה הזו:    &lt;br /&gt;&lt;/p&gt;  &lt;p dir="ltr" align="left"&gt;- Source Query – slow on large LIMIT&lt;/p&gt;  &lt;pre&gt;select f_id, f_title, f_date from flashes where&amp;#160; f_visible=1 order by f_date desc limit 10000,10&lt;/pre&gt;

&lt;p&gt;במערכת עמוסה, הפעולה הזו תיתקע. הפתרון המוצא הוא להוסיף אינדקס על השדות המתאימים (f_date, f_id), ולשלוף אותם בנפרד.&lt;/p&gt;

&lt;p dir="ltr" align="left"&gt;- Faster queries:&lt;/p&gt;

&lt;br /&gt;

&lt;pre&gt;select f_id&amp;#160; from flashes where f_visible=1 and f_date &amp;lt;= now() order by f_date desc&amp;#160; limit 10000,10&lt;/pre&gt;

&lt;p&gt;ואחר כך&lt;/p&gt;

&lt;pre&gt;select f_id, f_title,&amp;#160; f_date from flashes where f_id in (&amp;quot; &amp;amp; s &amp;amp; &amp;quot;)&amp;#160; order by f_date desc &lt;/pre&gt;

&lt;p&gt;כש – s הוא פשוט רשימת מספרים מופרדים בפסיקים – 1,3,4,5,6.&lt;/p&gt;

&lt;p&gt;ומה באשר ל-SQL Server – העניין לא שונה בהרבה. גם שם עניין ה-Covering Index מסייע משמעותית וניתן לעבוד באותה הצורה, גם בהיעדרו של LIMIT.&lt;/p&gt;

&lt;p&gt;שימוש יעיל!&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p dir="ltr" align="left"&gt;The solution: add a covering index on (f_date, f_id), 
  &lt;br /&gt;This make the first query to be fast, because it is Index-only opreation (and on a correct configuration – memory only). The second is simple just look on Primary Key, with the list of IDs from the first. 

  &lt;br /&gt;The variable &amp;quot;s&amp;quot; from the second query need to be the list of IDs with commas, like &amp;quot;1,2,56,8,4&amp;quot;.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=779086" width="1" height="1"&gt;</content><author><name>Moshe L</name><uri>http://blogs.microsoft.co.il/members/Moshe-L.aspx</uri></author><category term="ביצועים" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D105D905E605D505E205D905DD05_/default.aspx" /><category term="DEV" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/DEV/default.aspx" /><category term="MySQL" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/MySQL/default.aspx" /><category term="SEO" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/SEO/default.aspx" /><category term="SQL" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/SQL/default.aspx" /><category term="SQL Server" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/SQL+Server/default.aspx" /></entry><entry><title>MySQL 5.5.8 GA יצא. מה מעניין את משתמשי .net?</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2010/12/16/mysql-5-5-8-ga-net.aspx" /><id>http://blogs.microsoft.co.il/blogs/moshel/archive/2010/12/16/mysql-5-5-8-ga-net.aspx</id><published>2010-12-16T09:39:40Z</published><updated>2010-12-16T09:39:40Z</updated><content type="html">&lt;p&gt;השבוע יצאה סוף סוף הגרסה הסופית של MySQL 5.5. אני מנחש שמשתמשי הלינוקס למיניהם ידושו בו ויחקרו אותו היטב, אבל חוץ מהם, מסתבר שהחבר&amp;#39;ה שם עשו עבודה טובה למדיי בכל מה שקשור למשתמשי מיקרוסופט.&lt;/p&gt;  &lt;p&gt;1. ואת זה אני אומר מנסיון אישי, &lt;strong&gt;השיפור בביצועים בשליפות מתוחכמות מדהים&lt;/strong&gt;! ואני מדבר בעיקר על המחשב השולחני שלי ולא על שרתי מפלצת.&lt;/p&gt;  &lt;p&gt;2. השיפורים בביצועים על Windows מורגש היטב, לעיתים עד פי עשר משליפות קודמות. מישהו ב-Orcale לקח לראשונה ברצינות את מערכת ההפעלה הפופולרית ולא רק את Linux/Unix/Solaris.&lt;/p&gt;  &lt;p&gt;3. MySQL הפכו את INNODB לברירת המחדל שלהם. בהתאמה, הוא גם מנצח את החבר הוותיק MyISAM בהרבה מאוד בדיקות ביצועים וגם בבדיקות הקטנות שאני ניסיתי לעשות.   &lt;br /&gt;מצד שני, היו כמה וכמה שליפות שנצרכתי לשנות ולשפץ&lt;/p&gt;  &lt;p&gt;4. MySQL Connector לסביבת NET. התקדם לגירסא 6.3.5. השיפורים בביצועים וגם בשאר היכולות שלו – בהחלט נחמדים כשלומדים אותו לעומק.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;שימוש מהנה!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=757587" width="1" height="1"&gt;</content><author><name>Moshe L</name><uri>http://blogs.microsoft.co.il/members/Moshe-L.aspx</uri></author><category term="ASP.net" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/ASP.net/default.aspx" /><category term="DEV" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/DEV/default.aspx" /><category term="MySQL" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/MySQL/default.aspx" /></entry><entry><title>Fiddler הקוסם ומספרי הקסם של GZIP</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2010/10/10/fiddler-gzip.aspx" /><id>http://blogs.microsoft.co.il/blogs/moshel/archive/2010/10/10/fiddler-gzip.aspx</id><published>2010-10-10T21:35:44Z</published><updated>2010-10-10T21:35:44Z</updated><content type="html">&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/moshel/image_2447FBF3.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/moshel/image_thumb_3788B292.png" width="395" height="169" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;ללא מילים.&lt;/p&gt;  &lt;p&gt;יש עוד הרבה תרגומים הזויים של הודעות שגיאה ב-Framework. אולי כדאי להתחיל אוסף.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=724456" width="1" height="1"&gt;</content><author><name>Moshe L</name><uri>http://blogs.microsoft.co.il/members/Moshe-L.aspx</uri></author><category term="עברית" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_E205D105E805D905EA05_/default.aspx" /><category term="OffTopic" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/OffTopic/default.aspx" /></entry><entry><title>וירוסים התחילו לשלוח מיילים מתורגמים</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/moshel/archive/2010/10/05/718340.aspx" /><id>http://blogs.microsoft.co.il/blogs/moshel/archive/2010/10/05/718340.aspx</id><published>2010-10-05T07:18:00Z</published><updated>2010-10-05T07:18:00Z</updated><content type="html">&lt;p&gt;קיבלתי את המייל הזה הבוקר, ממשתמש שכנראה נפרצה התיבה שלו בחברת AT&amp;amp;T האמריקאית:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;שלום   &lt;br /&gt;זה נותן לי תענוג גדול לכתוב לך הייתי הגלישה כאשר אני נתקל הפרופיל שלך ו משהו נגע בי ליצור איתך קשר אני אשמח מאוד להיות בקשר עם לך אם יהיה לך את הרצון איתי כדי שנוכל להכיר אחד את השני ולראות מה קרה future.i ישמח מאוד אם תוכל לכתוב לי דרך הדוא&amp;quot;ל שלי עבור לי לספר לך עוד על עצמי ולתת לך תמונה שלי בתור התחלה טובה. אני אהיה מחכה לשמוע ממך. שיהיה לך יום מבורך.    &lt;br /&gt;מתוך רחמים&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;קריאה קצרה של הטקסט מראה שהוא תורגם כנראה בשרותי גוגל או דומים להם. אם בעבר יכולתי פשוט לסנן מיילים שנכתבו באנגלית והיו ממקור לא מוכר, עכשיו זה יהיה קצת יותר מורכב. לא נורא&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=718340" width="1" height="1"&gt;</content><author><name>Moshe L</name><uri>http://blogs.microsoft.co.il/members/Moshe-L.aspx</uri></author><category term="אבטחה" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/_D005D105D805D705D405_/default.aspx" /><category term="ITPRO" scheme="http://blogs.microsoft.co.il/blogs/moshel/archive/tags/ITPRO/default.aspx" /></entry></feed>
