<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>DataDriven</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/mike_wise/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/mike_wise/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:47:24 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Linq and the Usage DB</title>
      <link>https://docs.microsoft.com/archive/blogs/mike_wise/linq-and-the-usage-db</link>
      <pubDate>Mon, 26 Apr 2010 04:09:11 GMT</pubDate>
      <dc:creator><![CDATA[Mike Wise]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/mike_wise/2010/04/26/linq-and-the-usage-db/</guid>
      <description><![CDATA[The new SharePoint 2010 Usage DB is officially know the “Logging DB”. No one I know actually calls...]]></description>
      <content:encoded><![CDATA[<p>The new SharePoint 2010 Usage DB is officially know the “Logging DB”. No one I know actually calls it that though, so I am careful to include both in this post. Anyway, I recently updated some of my code to read from the Usage DB instead of IIS logs and Performance Counters. It was the first time I had used Linq to connect to a SQL db, and it was pretty easy I have to admit. Nonetheless, it did cost me a few hours of searching and typing, so I will post the stuff here to save anyone else the bother. </p> <p>Some things you should know about the Usage DB ahead of time.</p> <blockquote> <p>1) It is organized into many partitioned tables, one being active at a time and the partitions wrapping around and eventually overwriting one another. This would make accessing the data complicated, so there are views that make these partitioned tables go away. You access the data over views.</p> <p>2) The number of partitioned tables can be configured, changing the amount of data and the length of time that it is retained. As I recall this can be done with a PowerShell command and results in all the current data being lost. 31 days is the max retention I believe. I should check all this …</p> <p>3) The Usage DB tends to quickly become one of the biggest databases on the system, so many admins will want to turn it off, or reconfigure it to store only a small amount of data.</p> <p>4) Querying the Usage DB can impact your running system, so if you really want to party on the data, pull a backup and restore it somewhere else and use that.</p> <p>5) The Usage DB will have sensitive data in it including PII data since it records the urls, user login, etc. I suppose someone needs to write a cleanser for it.</p></blockquote> <p>Anyway, here is some code to access a single table (The RequestUsage View) in the Usage DB using Linq. I used Visual Studio 2008 for this. Have fun.</p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; color: blue; font-size: 10pt; mso-no-proof: yes">using</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"> System;<?xml:namespace prefix = o /><o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; color: blue; font-size: 10pt; mso-no-proof: yes">using</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"> System.Collections.Generic;<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; color: blue; font-size: 10pt; mso-no-proof: yes">using</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"> System.Linq;<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; color: blue; font-size: 10pt; mso-no-proof: yes">using</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"> System.Text;<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; color: blue; font-size: 10pt; mso-no-proof: yes">using</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"> System.Data.Linq;<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; color: blue; font-size: 10pt; mso-no-proof: yes">using</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"> System.Data.SqlClient;<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><o:p>&nbsp;</o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; color: blue; font-size: 10pt; mso-no-proof: yes">namespace</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"> TestLinq<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes">{<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><span style="color: blue">class</span> <span style="color: #2b91af">LINQQueryExpressions<o:p></o:p></span></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Table</span>(Name = <span style="color: #a31515">"RequestUsage"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">class</span> <span style="color: #2b91af">SharePointRequest<o:p></o:p></span></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"PartitionId"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">byte</span> PartitionId { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"RowId"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: #2b91af">Guid</span> RowId { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"LogTime"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: #2b91af">DateTime</span> LogTime { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"MachineName"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">string</span> MachineName { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"FarmId"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: #2b91af">Guid</span> FarmId { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"SiteSubscriptionId"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: #2b91af">Guid</span> SiteSubscriptionId { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"UserLogin"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">string</span> UserLogin { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"CorrelationId"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: #2b91af">Guid</span> CorrelationId { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"WebApplicationId"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: #2b91af">Guid</span> WebApplicationId { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"ServerUrl"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">string</span> ServerUrl { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><o:p>&nbsp;</o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"SiteId"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: #2b91af">Guid</span> SiteId { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"SiteUrl"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">string</span> SiteUrl { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"WebId"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: #2b91af">Guid</span> WebId { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"WebUrl"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">string</span> WebUrl { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"DocumentPath"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">string</span> DocumentPath { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"ContentTypeId"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">string</span> ContentTypeId { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"QueryString"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">string</span> QueryString { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"BytesConsumed"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">int</span> BytesConsumed { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"HttpStatus"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">short</span> HttpStatus { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"SessionId"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">string</span> SessionId { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><o:p>&nbsp;</o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"ReferrerUrl"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">string</span> ReferrerUrl { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"ReferrerQueryString"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">string</span> ReferrerQueryString { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"Browser"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">string</span> Browser { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"UserAgent"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">string</span> UserAgent { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"UserAddress"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">string</span> UserAddress { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"RequestCount"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">short</span> RequestCount { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"QueryCount"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">short</span> QueryCount { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"QueryDurationSum"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">long</span> QueryDurationSum { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"OperationCount"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">long</span> OperationCount { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"Duration"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">long</span> Duration { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><o:p>&nbsp;</o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"RequestType"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">string</span> RequestType { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"Title"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: blue">string</span> Title { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[System.Data.Linq.Mapping.<span style="color: #2b91af">Column</span>(Name = <span style="color: #a31515">"RowCreatedTime"</span>)]<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">public</span> <span style="color: #2b91af">DateTime</span> RowCreatedTime { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><o:p>&nbsp;</o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">static</span> <span style="color: blue">void</span> Process()<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><o:p>&nbsp;</o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">// Specify the data source.<o:p></o:p></span></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">string</span> dbname = <span style="color: #a31515">"mcm05_usagedb"</span>;<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">string</span> connectionString = <span style="color: #a31515">"Data Source=(local);Initial Catalog="</span>+<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>dbname+<span style="color: #a31515">";Integrated Security=SSPI;"</span>;<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">var</span> sqlcct = <span style="color: blue">new</span> <span style="color: #2b91af">SqlConnection</span>(connectionString);<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><o:p>&nbsp;</o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sqlcct.Open();<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><o:p>&nbsp;</o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">if</span> (sqlcct.State != System.Data.<span style="color: #2b91af">ConnectionState</span>.Open)<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #2b91af">Console</span>.WriteLine(<span style="color: #a31515">"Could not open - "</span> + <o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #a31515">" Ver:"</span>+sqlcct.ServerVersion+<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #a31515">" State:"</span> + sqlcct.State);<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #2b91af">Console</span>.ReadLine();<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">return</span>;<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><o:p>&nbsp;</o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">var</span> dc = <span style="color: blue">new</span> <span style="color: #2b91af">DataContext</span>(sqlcct);<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">var</span> reqtable = dc.GetTable&lt;<span style="color: #2b91af">SharePointRequest</span>&gt;();<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><o:p>&nbsp;</o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #2b91af">IQueryable</span>&lt;<span style="color: #2b91af">SharePointRequest</span>&gt; reqquery = <span style="color: blue">from</span> req <span style="color: blue">in</span> reqtable <span style="color: blue">select</span> req;<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><o:p>&nbsp;</o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">// Execute the query.<o:p></o:p></span></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">foreach</span> (<span style="color: blue">var</span> r <span style="color: blue">in</span> reqquery)<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #2b91af">Console</span>.WriteLine(<span style="color: #a31515">"Part:"</span>+r.PartitionId + <span style="color: #a31515">" Row"</span> + r.RowId+<span style="color: #a31515">" "</span>+ r.UserLogin);<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #2b91af">Console</span>.ReadLine();<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">static</span> <span style="color: blue">void</span> Main()<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"></span><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Process();<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes"><o:p></o:p></span></p> <p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt; mso-no-proof: yes">}<o:p></o:p></span></p> <p class="MsoNormal"><o:p>&nbsp;</o:p></p> <p class="MsoNormal"><o:p>&nbsp;</o:p></p>]]></content:encoded>
    </item>
    <item>
      <title>Measurable Concepts</title>
      <link>https://docs.microsoft.com/archive/blogs/mike_wise/measurable-concepts</link>
      <pubDate>Mon, 19 Apr 2010 04:02:53 GMT</pubDate>
      <dc:creator><![CDATA[Mike Wise]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/mike_wise/2010/04/19/measurable-concepts/</guid>
      <description><![CDATA[Here we talk about how to make demand concepts measurable. This is an extremely important part of...]]></description>
      <content:encoded><![CDATA[<p>Here we talk about how to make demand concepts measurable. This is an extremely important part of enabling a continuously improving capacity management methodology. <h4><a name="_Toc240976093">Measureable Demand Concepts</a></h4> <p>Precisely defining our concepts in measurable quantities is a difficult task and we do not pretend to have done it here. Each concept need a study in itself backed with supporting data to show that the measurement technique is successful. Investment (not a huge amount – but a significant amount) needs to be made to accomplish this. <p>What we really need is a demand model that derives from <b>business drivers</b>. Although we can use RPS as a measure of our demand (and we do in some later chapters), it is in no way a business driver and should be considered a temporary substitute. A business driver would be something that a BDM (Business Decision Maker) can provide technical assistance, like how many users need to use the system and what operations will they perform against it.<br>We will run through the major concepts we need here and list the alternatives we have for definition. </p> <ul> <li><b>Workload</b> – While workload seems to be a well-defined concept, in fact it is a problematic one. If we plan for one workload and our deployment is in fact used for another then we will have a problem. A related question is when two different workloads can perhaps be considered to be the same from the point-of-view of resource consumption. A workable measureable definition could probably be obtained by looking at the incoming requests in the IIS logs and categorizing them. Although some work has been done by SharePoint test teams in this area, much more remains to be done.</li> <ul> <li><b>Total User Number</b> – This is easy for most cases, namely the number of users in the user profile database. However for an anonymous situation it is more problematic since we do not have the users name and cannot actually distinguish between the users. Fortunately this is not a hugely important planning case.</li> <li><b>Active Users</b> – This is a controversial – but probably necessary abstraction. The idea is that there are a certain number of users who are active – i.e. about to use SharePoint. An alternate formulation would be those that are deriving value from SharePoint at this instant. This is a somewhat smaller number than the Total User Number. <br>Note that it is unclear how to measure this number – techniques range from installing user agents to register it directly, taking some fixed factor of the distinct users seen in logs a time period, or setting up an advanced Markov-process model and estimating the parameters numerically have all been suggested, but they all have obvious drawbacks. <br></li></ul> <li><b>Concurrency</b> – This is one of the toughest concepts to define. Architects frequently refer to “active users”, who are requesting pages, then reading them (i.e. experiencing think time). However it is not clear that this is a well-defined concept (see above) and it is in any case very difficult to measure. However if we insist on having something measurable there are a couple of usable alternatives:</li> <ul> <li><b>Requests in flight</b> – This is interpreted as the number of users who have requested a page load and are waiting for it to complete. This is not easy to measure as one would think since IIS log resolution is only one second and many page loads return in less than one second. While this could be rectified with some kind of IIS filter but we do not know of anyone who has pursued this, but we mention it here for completeness. <br>The actual numerical values of requests in flight tend to be very low, thus on a collaboration system serving 150k users one will probably only be serving no more than 30 users at a single time (and 300 Requests per second). So percent concurrency on this measurement will be small fractions of a percent.</li> <li><b>Distinct Users per unit time</b> – while this is an attractive and fairly straight forward value to use, it has some problems. The major one is that the unit of time to use is not clear. It is clear that the longer the unit of time used, the bigger the measured value will be. One could hope that there would be a sudden discontinuity at some time which would reveal the time interval to use – but this is not the case; it is a smoothly continuously increasing function. None the less it seems to be the best value we have and is occasionally used by the more savvy planners. To our experience the best values (corresponding to our guidance) seem to be in the 3-5 minute range – i.e. Distinct Users per 3 minutes, or Distinct users per 5 minutes. Divide this by the total user number to get the “concurrency”.<br></li></ul> <li><b>Request Rate</b> – This is bound up very heavily with the way we measure concurrency, since concurrency times this number (presumably the average request rate) will give us our actual RPS (which is fixed). <br>So for example if we use “distinct users seen in 3 minutes” for our concurrency value, we will get a different average request rate per user than if we decide to use “distinct users seen in 5 minutes” since the product of the N*C*R remains fixed. <br></li> <li><b>Peak RPS</b> - While peak RPS seems clear, a little thought will reveal that the number is always bound to a definite time interval. Thus we have the Peak RPS (i.e. the max RPS for any one second), the Peak Average RPS for a minute, the Peak Average RPS for an hour etc. Analysis show that RPS tends to closely follow a normal distribution, thus an average and a standard deviation characterize these values fairly well.<br>But which RPS should be planned for? Of course it depends on your taste, but since this follows a normal distribution you can use standard bell-shaped curves and use fairly simple statistics to calculate the amount of time your deployment will exceed whatever value you plan for. This approach will be expanded upon in the following. <br><i>We believe a better approach is to abandon completely the idea of a peak and talk of distributions instead.<br></i></li> <li><b>User Operation</b> – what is a real user operation – i.e. the smallest unit of business value to the customer? A page load is one alternative for this, however this is already somewhat far removed from an IIS request, so it is not clear how to measure it. <br>Once common classification begin used in the PG refers to page loads as PLT1 (the first time a page is loaded on a client – with the client cache uncharged), PLT2 (second time) and others – and these all have rather different ratios of requests per usage operation – the values seem to vary strongly depending on the workload, client configuration, patch level, customization, etc, and it is very hard to measure at the server. However as a rule-of-thumb values between 5-1 and 20-1 tend to be used when absolutely necessary. Clearly more investigation needs be done here.<b></b></li></ul> <p>Note that some of these concepts were used in the RPS Equation mentioned above. A diagram showing a possible interpretation of the RPS equation and the relationships follows: <p>&nbsp; <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/mike_wise/WindowsLiveWriter/MeasurableConcepts_B778/image_2.png" original-url="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/MeasurableConcepts_B778/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/mike_wise/WindowsLiveWriter/MeasurableConcepts_B778/image_thumb.png" original-url="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/MeasurableConcepts_B778/image_thumb.png" width="517" height="382"></a>  <p>Although this may seem fairly clear, the exposition above should have made it clear that we have different ways to measure and interpret the values and arrows in this diagram resulting in disagreement in the field as to what is correct. Since there is no authoritative guidance in this area, the conflicting interpretations of all these concepts co-exist which adds to the confusion. <p>So our situation is some of these values can be measured with the help of log files, but some cannot. Rarely is this done in the field – clearly more research needs to be performed and published in order to enable the ultimate goal of being able to estimate usage directly from business drivers. The measurement process for each value needs to be documented, and perhaps software written and the product instrumented to actually make these measurements. It is a not inconsiderable amount of work. <p>However the current situation is not hopeless even without this investment. We have rules of thumb for many of these values and a good idea where the values need to lie. However the definitions need to be firmed up and agreed up – along with sanctioned measurement techniques. These can form the basis of a calibratable model. <p>This is well defined and relatively easy to measure, but it suffers from not being a business driver and is thus not exactly what we need. <p>We do not mention the economic cost and green cost measures (like TCO and the Carbon Footprint), but they must be questioned as well, i.e. people think they are well-defined and measurable (to judge by the way they are talked about), but are they really? ]]></content:encoded>
    </item>
    <item>
      <title>The Abyss</title>
      <link>https://docs.microsoft.com/archive/blogs/mike_wise/the-abyss</link>
      <pubDate>Thu, 15 Apr 2010 01:16:47 GMT</pubDate>
      <dc:creator><![CDATA[Mike Wise]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/mike_wise/2010/04/15/the-abyss/</guid>
      <description><![CDATA[We use the following diagram to illustrate “The Abyss”:   An explanation follows – however the...]]></description>
      <content:encoded><![CDATA[<p>We use the following diagram to illustrate “The Abyss”:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/mike_wise/WindowsLiveWriter/TheAbyss_9087/image_2.png" original-url="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/TheAbyss_9087/image_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/mike_wise/WindowsLiveWriter/TheAbyss_9087/image_thumb.png" original-url="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/TheAbyss_9087/image_thumb.png" width="553" height="384"></a>  <p>An explanation follows – however the essential points are in the diagram.  <p>It is an interesting fact that most people who deal with SharePoint Architecture in the field usually belong in one of two camps. There are the <b>Planners</b> – the people who design and build SharePoint deployments to satisfy business requirements. Then there are the <b>Operationalists</b> - who maintain, extend and troubleshoot SharePoint deployments. While there are indeed people who do both activities most concepts tools and guidance are directed at one or the other group, and we will show that even these people who perform both roles end up in a somewhat schizophrenic situation, since it is almost impossible to relate the two in our current state.  <h5><a name="_Toc240976089">The Planner Side</a></h5> <p>It is tempting to invoke the classic theoretical/pragmatic dichotomy and say that the planners are being theoretical, and the operationalists are being practical about the same problem. However in fact the planners are being pragmatic as well. They are in the position of having to design a system to meet business requirements and are forced to use measures to estimate the demand. The most important quantities in this “demand model” are:  <ul> <li>The workloads (previously called scenario) for which the system will be used.  <li>The number of users using the system for a required workload.  <li>The pattern of concurrent usage by these users.  <li>The number of requests (operations of business value) that they will be required per user per unit time.</li></ul> <p>These values are supposed to be used in the well known RPS equation (about which I will blog later):  <p><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; N * C * R = RPS</b>  <p>Where:  <ul> <li><b>N</b> = Number of active users of the system  <li><b>C </b>= Peak concurrency rate  <li><b>R</b> = Average Request Rate per User (LTHE classification - Light = 20 R/hour, Typical=36 R/hour, Heavy=60 R/hour, Extreme=120 R/hour)  <li><b>RPS</b> = Peak request/sec rate</li></ul> <p>This equation was documented in various places. And the spirit of this equation is correct - the <i>number of users,</i> <i>pattern of concurrent users</i>, <i>Transactions</i> (which were sometimes documented to be operations of business value, and sometimes merely IIS requests of various nature), <i>Transactions per Second</i> are all closely-enough linked to business drivers. But the problems become apparent when a planner tries to actually fill out this equation.  <p>However it is not at all clear what these values really mean and little agreement both inside and outside of Microsoft as to what they <i>should</i> mean. Some experts had their own conventions, but they where not built-in into any of our metrics, but different experts used different conventions which merely added to the confusion. Thus well-meaning planners who use this demand model were likely to use all kinds of values, and different planners can justify widely varying values based on their understanding of the meaning of the terms – and came up with similarly widely varying resource requirement estimates as a result.  <p>Also since there are no clear-cut and accepted ways to measure these values on a real system, experience turned out to be of little help. So a planner who visits a system a year or two after deployment to check the validity of his or her assumptions will find it practically impossible to do so.  <p>We should also mention that our now frustrated planner even finds it very difficult to use an existing functional system with a similar workload to help, as the values that are needed are simply not being measured – these include:  <ul> <li>What is the workload being served?  <li>How many users are active?  <li>What is the user concurrency?  <li>What and how many operations of business value are being executed?</li></ul> <h5><a name="_Toc240976090">The Operationalist Side</a></h5> <p>The Operationalist in their highest developed form is a person with experience on a wide range of SharePoint systems. They have extensive experience troubleshooting performance problems and usually have a tight community and share experiences and lessons with each other in an exemplary manner. More to the point - they know where bottlenecks have occurred in the past (and are thus are likely to re-occur) and have a suite of methods that they can use to check these.<br>It is an interesting and sad fact that they will rarely (never?) be interested in or even exposed to the original planning estimates and documents for the system. In fact they will just assume it is probably not useful or wrong (there are problems, right?) and go straight to the system and make measurements, frequently from performance counters that measure resource utilization of one sort or another. Eventually (hopefully) they will find the bottleneck and take remedial measures. They have a high success rate (eventually) and work closely with the product group (at least more closely than the planners to my experience) to ensure that this knowledge is preserved and propagated.  <p>However it is not a really satisfactory state-of-affairs, since there is usually a lot of suffering that occurs before problem resolution that damages our reputation and slows adoption.  <p>And since there is no systematic methodology to relate their measurements to the actual planning values (which are not well-defined or measurable anyway) it is unclear how this knowledge should feedback in any case.  <h5><a name="_Toc240976091">Capacity Management vs. Capacity Planning</a></h5> <p>So this is “The Abyss”. We have our planners, who create designs based on estimates and hope to get things right, but the guidance does not change (even from version to version). And we have our Operationalists, who adapt to changing situations and fix problems as they occur, but have no way to feedback their experience into a model that can be used for planning. Note that the Microsoft field has people in both camps. And it is well-known that the Operationalists enjoy informing the Planners that they have had to clean up after their mess.  <p>The way out of course is to design a “Capacity Management” practice, that can be used by both parties in the same way. Planners and Operationalists should be the same people speaking the same measurable language. But they cannot do it alone. We must give them a framework that satisfies both of their needs.  <p>Have we done this for the new version – SharePoint 2010? There are some very positive developments in this direction. However it is hard – in fact very hard – to come up with a solid predictive model that can handle SharePoint with all its workloads and possible configurations. So I expect the Abyss will only go away slowly, but I expect it to be much narrower now with SharePoint 2010.  ]]></content:encoded>
    </item>
    <item>
      <title>Capacity Management vs. Capacity Planning</title>
      <link>https://docs.microsoft.com/archive/blogs/mike_wise/capacity-management-vs-capacity-planning</link>
      <pubDate>Wed, 14 Apr 2010 04:02:00 GMT</pubDate>
      <dc:creator><![CDATA[Mike Wise]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/mike_wise/2010/04/14/capacity-management-vs-capacity-planning/</guid>
      <description><![CDATA[This is the first in a series of posts around a topic that is very important to me. I have published...]]></description>
      <content:encoded><![CDATA[<p>This is the first in a series of posts around a topic that is very important to me. I have published and presented most everything here in the last couple of years internally in a number of venues:</p> <ul> <li>At internal SharePoint PG presentations (originally)&nbsp; <li>As part of the MCM SharePoint 2009 Capacity Planning training (which I wrote and delivered)  <li>In an internal ThinkWeek 2009 paper  <li>As parts of various TechReadys (an internal TechEd like event)  <li>And other venues...</li></ul> <p>However I have never put it out in something that was available outside of Microsoft. Now that it seems to be catching on (internally with SharePoint at least), I think it is time I went "public". So this will be a series of posts around that, including the best material from the ThinkWeek paper and dozens of presentations. So here we go:</p> <h2 style="margin: 10pt 0in 0pt"><a title="_Toc240976086" name="_Toc240976086"></a><span style="color: #00b050"><font size="4" face="Cambria">The Ideal</font></span><span style="color: #00b050"><font size="4"><font face="Cambria"> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></font></font></span></h2> <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="3"><font face="Calibri">We want to contrast the concepts of “Capacity Planning” and “Capacity Management”. Capacity Planning is what you do up-front, however it has a “throwaway” flavor to it which (as we will see) is particularly prevalent in the SharePoint world. The idea that a “Capacity management” methodology be used for the entire lifecycle of a deployment is not a new idea, and is actually the methodology that is promoted by both MOF and ITIL the two most widely promoted and accepted operational methodologies (at least in the Microsoft world in which we move) – and in fact they are very similar since MOF was mostly inspired by ITIL.<o:p></o:p></font></font></p> <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="3"><font face="Calibri">Both MOF and ITIL require a continuously improving process for a given deployment. Both require that some kind of modeling be used at all stages in a process that continually runs to active an optimal deployment even in changing situations. A high-level diagram of this process taken from the MOF documentation is shown here:</font></font></p> <p style="margin: 0in 0in 10pt" class="MsoNormal" mce_keep="true"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/mike_wise/WindowsLiveWriter/CapacityManagementvs.CapacityPlanning_2D9C/MofIdeal_2.png" original-url="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/CapacityManagementvs.CapacityPlanning_2D9C/MofIdeal_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="MofIdeal" border="0" alt="MofIdeal" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/mike_wise/WindowsLiveWriter/CapacityManagementvs.CapacityPlanning_2D9C/MofIdeal_thumb.png" original-url="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/CapacityManagementvs.CapacityPlanning_2D9C/MofIdeal_thumb.png" width="316" height="272"></a>&nbsp;</p> <p style="text-align: center; margin: 0in 0in 10pt" class="MsoNormal" align="center"><span style="mso-no-proof: yes"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype></span><o:p></o:p></p> <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="3"><font face="Calibri">There can be some debate as to what “Modeling” consists of, at the minimum we would expect some process that would allow us to vary our resource configuration and somehow predict what kind of performance we can expect.<o:p></o:p></font></font></p> <p><font size="3"><font face="Calibri">So how would we expect this to work in a SharePoint deployment situation? We show a more detailed diagram here:</font></font></p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/mike_wise/WindowsLiveWriter/CapacityManagementvs.CapacityPlanning_2D9C/MofIdealDetailed_2.png" original-url="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/CapacityManagementvs.CapacityPlanning_2D9C/MofIdealDetailed_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="MofIdealDetailed" border="0" alt="MofIdealDetailed" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/mike_wise/WindowsLiveWriter/CapacityManagementvs.CapacityPlanning_2D9C/MofIdealDetailed_thumb.png" original-url="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/CapacityManagementvs.CapacityPlanning_2D9C/MofIdealDetailed_thumb.png" width="463" height="358"></a> </p> <p style="text-align: center; margin: 0in 0in 10pt" class="MsoNormal" align="center"><span style="mso-no-proof: yes"></span><o:p></o:p></p> <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="3"><font face="Calibri">In more detail:<o:p></o:p></font></font></p> <p style="margin: 0in 0in 0pt 0.5in" class="MsoListParagraphCxSpFirst"><font face="Calibri"><b style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-size: 12pt; mso-bidi-font-size: 11.0pt">Modeling</span></b><span style="line-height: 115%; font-size: 12pt; mso-bidi-font-size: 11.0pt"> </span></font><font size="3"><font face="Calibri">– Here we model our installation – presumably using the demand model described below. For example the SharePoint Capacity Planner (SPCP) uses this model. This will give us a prediction as to what kind of resources we will need to host this demand. The result of this step is a model that we can use in the Optimizing step to make decisions. Green considerations (like the carbon footprint) should be part of this model.<br style="mso-special-character: line-break"><br style="mso-special-character: line-break"><o:p></o:p></font></font></p> <p style="margin: 0in 0in 0pt 0.5in" class="MsoListParagraphCxSpMiddle"><b style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-size: 12pt; mso-bidi-font-size: 11.0pt"><font face="Calibri">Optimizing </font></span></b><font size="3"><font face="Calibri">– The optimizing step is similar to the modeling step. In this step various assumptions and alternatives are considered using our model. At the end we have a configuration (possibly just a change to an existing config) that we want to implement.<br style="mso-special-character: line-break"><br style="mso-special-character: line-break"><o:p></o:p></font></font></p> <p style="margin: 0in 0in 0pt 0.5in" class="MsoListParagraphCxSpMiddle"><font face="Calibri"><b style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-size: 12pt; mso-bidi-font-size: 11.0pt">Change Initiation</span></b><span style="line-height: 115%; font-size: 12pt; mso-bidi-font-size: 11.0pt"> </span></font><font size="3"><font face="Calibri">– Perhaps the word “deployment” would fit better here, however in this step the configurations that we decided in the preceding step are implemented. This can be a very complicated step but it is not in the scope of this document.<br style="mso-special-character: line-break"><br style="mso-special-character: line-break"><o:p></o:p></font></font></p> <p style="margin: 0in 0in 0pt 0.5in" class="MsoListParagraphCxSpMiddle"><font face="Calibri"><b style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-size: 12pt; mso-bidi-font-size: 11.0pt">Monitoring</span></b><span style="line-height: 115%; font-size: 12pt; mso-bidi-font-size: 11.0pt"> </span></font><font size="3"><font face="Calibri">– Once we are live we will start monitoring – collecting logs and performance counters, monitoring event logs, and other relevant artifacts.<br style="mso-special-character: line-break"><br style="mso-special-character: line-break"><o:p></o:p></font></font></p> <p style="margin: 0in 0in 10pt 0.5in" class="MsoListParagraphCxSpLast"><font face="Calibri"><b style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-size: 12pt; mso-bidi-font-size: 11.0pt">Analysis </span></b><font size="3">– In the analysis phase we take the artifacts gathered in the Monitoring phase and analyze them to find problems and evaluate the quality of the deployment. At this point we will normally have at least some divergences from what our model predicted. So in the next step we will need to update and adjust our model to reflect this. <o:p></o:p></font></font></p> <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="3"><font face="Calibri"><span style="mso-spacerun: yes">&nbsp;</span>Note that there is a key difference between the first time we hit the Modeling step, and the second time. In the first time we are operating with no existing deployment data and can use our model “as-is”. In the second and subsequent rounds we need to adjust the model to reflect reality. <o:p></o:p></font></font></p> <h2 style="margin: 10pt 0in 0pt"><a title="_Toc240976087" name="_Toc240976087"></a><span style="color: #00b050"><font size="4" face="Cambria">The Reality</font></span><span style="color: #00b050"><o:p></o:p></span></h2> <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="3"><font face="Calibri">There is a SharePoint Capacity Planning (SPCP) model used in the field for SharePoint 2007 – and it is often used in the first cycle of planning. However the model has fundamental shortcomings when it is attempted to use it in more than one cycle of planning. If there are differences in what the model predicted and what we measured, then we need to adjust (or calibrate) the model. Some common reasons for this are:<o:p></o:p></font></font></p> <p style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpFirst"><span style="mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin"><span style="mso-list: ignore"><font size="3" face="Calibri">1.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="3"><font face="Calibri">The user workload is different than anticipated.<o:p></o:p></font></font></p> <p style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpMiddle"><span style="mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin"><span style="mso-list: ignore"><font size="3" face="Calibri">2.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="3"><font face="Calibri">The hardware that is being used behaves differently than the model predicts.<o:p></o:p></font></font></p> <p style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpMiddle"><span style="mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin"><span style="mso-list: ignore"><font size="3" face="Calibri">3.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="3"><font face="Calibri">The actual transaction costs are different because of customization.<o:p></o:p></font></font></p> <p style="text-indent: -0.25in; margin: 0in 0in 10pt 0.5in; mso-list: l0 level1 lfo1" class="MsoListParagraphCxSpLast"><span style="mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin"><span style="mso-list: ignore"><font size="3" face="Calibri">4.</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><font size="3"><font face="Calibri">The actual transaction costs are different because the product has evolved. <o:p></o:p></font></font></p> <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="3"><font face="Calibri">Only the first point here can be directly addressed by SPCP (assuming we know how to actually measure the workload). However the other three are fixed - SPCP does not make provisions for adjusting or calibrating those values and we cannot use the model in this cycle. So we end up with a truncated Capacity Management Cycle as follows:</font></font></p> <p style="margin: 0in 0in 10pt" class="MsoNormal"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/mike_wise/WindowsLiveWriter/CapacityManagementvs.CapacityPlanning_2D9C/Reality_2.png" original-url="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/CapacityManagementvs.CapacityPlanning_2D9C/Reality_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Reality" border="0" alt="Reality" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/mike_wise/WindowsLiveWriter/CapacityManagementvs.CapacityPlanning_2D9C/Reality_thumb.png" original-url="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/CapacityManagementvs.CapacityPlanning_2D9C/Reality_thumb.png" width="462" height="243"></a> </p> <p style="margin: 0in 0in 10pt" class="MsoNormal">&nbsp;</p> <p style="text-align: center; margin: 0in 0in 10pt" class="MsoNormal" align="center"><span style="mso-no-proof: yes"></span><o:p></o:p></p> <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="3"><font face="Calibri">The end result is that modeling is performed only in the “planning phase”, and this sets us up for the “The Abyss”, described in the following section. While we do have a continuingly improving process - our deployments get better over time - it is a truncated one, because the model must be left out of the cycle – the model’s predictions cannot improve to match our experience. And a particular insidious result is that our future planning does not benefit from this experience.</font></font></p> <p style="margin: 0in 0in 10pt" class="MsoNormal"><font size="3"><font face="Calibri"><span style="mso-spacerun: yes">it is possible to design a model without these shortcomings. We will talk about how to do this in future posts.</span> <o:p></o:p></font></font></p> <p mce_keep="true">&nbsp;<strong>Notes:</strong><strong><br></strong>&nbsp; Most of this text was written in early 2009, and some things have changed since then: </p> <ul> <li> <div mce_keep="true">The importance of lifecycle capacity management is recognized by the PG and some new features in 2010 support this (partly). </div> <li> <div mce_keep="true">Additionally SPCP has been withdrawn from support, without a substitute. This is a shame, I think they should have fixed it instead of killing it. But it is an opportunity for someone maybe.</div> <li> <div mce_keep="true">Some people argue that this does not matter, that it is simply a starting point. However I think it does, and I explain why in the next post. </div></li></ul>]]></content:encoded>
    </item>
    <item>
      <title>First Post</title>
      <link>https://docs.microsoft.com/archive/blogs/mike_wise/first-post</link>
      <pubDate>Sun, 28 Mar 2010 16:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Mike Wise]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/mike_wise/2010/03/28/first-post/</guid>
      <description><![CDATA[Hi, My name is Mike Wise and I work for MCS – Microsoft Consulting Services – also known as...]]></description>
      <content:encoded><![CDATA[<P>Hi, My name is Mike Wise and I work for MCS – Microsoft Consulting Services – also known as Microsoft Enterprise Services. Although my background is that of a general developer/solution architect, somehow over the last few years I have become pretty closely associated with SharePoint, and the Capacity Planning thereof. I have done a lot of planning and research around this topic over the last few years and think it is time to share some of those nuggets. </P>
<P>I have delivered some large Enterprise SharePoint designs, and developed and teach the MCM SharePoint Capacity Planning Course. I also have the certification myself – which was a lot of work but rewarding in the end.</P>
<P>So here we go.</P>
<P>This post is really more of a "test" post, I am experimenting a bit to see what kind of graphics I can use, how fast it updates, how amenable it is to changes, etc. So bear with me for a week or so while I figure things out. (I figured out that you pretty much have to use Live Writer to do anything decent) </P>
<P>Any way, so here are a couple pictures of me:</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/mike_wise/WindowsLiveWriter/TestPost_972E/image_2.png" original-url="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/TestPost_972E/image_2.png" mce_href="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/TestPost_972E/image_2.png"><IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/mike_wise/WindowsLiveWriter/TestPost_972E/image_thumb.png" original-url="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/TestPost_972E/image_thumb.png" width=199 height=201 mce_src="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/TestPost_972E/image_thumb.png"></A> <A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/mike_wise/WindowsLiveWriter/TestPost_972E/image_4.png" original-url="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/TestPost_972E/image_4.png" mce_href="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/TestPost_972E/image_4.png"><IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/mike_wise/WindowsLiveWriter/TestPost_972E/image_thumb_1.png" original-url="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/TestPost_972E/image_thumb_1.png" width=193 height=195 mce_src="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/TestPost_972E/image_thumb_1.png"></A> </P>
<P>And here is a picture of something I programmed once – if you don’t know what it is – post a guess:</P>
<P mce_keep="true">&nbsp;<A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/mike_wise/WindowsLiveWriter/TestPost_972E/4d%20vis_2.jpg" original-url="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/TestPost_972E/4d%20vis_2.jpg" mce_href="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/TestPost_972E/4d%20vis_2.jpg"><IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="4d vis" border=0 alt="4d vis" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/mike_wise/WindowsLiveWriter/TestPost_972E/4d%20vis_thumb.jpg" original-url="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/TestPost_972E/4d%20vis_thumb.jpg" width=514 height=551 mce_src="https://blogs.technet.com/blogfiles/mike_wise/WindowsLiveWriter/TestPost_972E/4d%20vis_thumb.jpg"></A></P>]]></content:encoded>
    </item>
  </channel>
</rss>