<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Ramblings of a SharePoint guy</title><subtitle type="html">See what happened was.....</subtitle><id>http://blogs.technet.com/b/rycampbe/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.technet.com/b/rycampbe/" /><link rel="self" type="application/atom+xml" href="http://blogs.technet.com/b/rycampbe/atom.aspx" /><generator uri="http://telligent.com" version="5.6.50428.7875">Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><updated>2011-08-23T10:30:33Z</updated><entry><title>SharePoint 2007 Upgrade – Identifying Customizations</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/b/rycampbe/archive/2013/06/11/sharepoint-2007-upgrade-identifying-customizations.aspx" /><link rel="enclosure" type="text/plain" length="56428" href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-03-57-81-91/Identify-Customizations-sql.txt" /><id>http://blogs.technet.com/b/rycampbe/archive/2013/06/11/sharepoint-2007-upgrade-identifying-customizations.aspx</id><published>2013-06-11T18:07:00Z</published><updated>2013-06-11T18:07:00Z</updated><content type="html">&lt;p&gt;During an upgrade from SharePoint 2007 to 2010, knowing where custom webparts and features are deployed can be useful for targeted testing and mitigation. Here's is some TSQL to help identify where those sites are.&lt;/p&gt;
&lt;p&gt;First, from SharePoint 2007, execute the PowerShell:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ststadm -o enumallwebs -includewebparts -includefeatures -databasename WSS_Content_YourDBName &amp;gt; sp2007EnumWebsOutput.txt &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This command essentially lists every web in your database and the features and webparts it's using. Compare that list with a known list of out-of-box (OOB) features and the deltas will be the customizations. I wrapped that up into a TSQL command the creates a nice pivot table with webs and customizations. To use it, copy the sp2007EnumWebsOut.txt to an instance of SQL Server and execute the attached TSQL (attached).&amp;nbsp; The result with be 3 SQL Results with the source of the features listed (OOB, Fab40 or Custom). Copy and paste those&amp;nbsp;to Excel and you can do whatever filtering and sorting you need to identify the sites.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3578191" width="1" height="1"&gt;</content><author><name>Ryan Campbell</name><uri>http://blogs.technet.com/ryan.campbell_4000_outlook.com/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>SSL Sites with Hostnames in SharePoint 2010 and SharePoint 2013</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/b/rycampbe/archive/2013/06/07/ssl-sites-with-hostnames-in-sharepoint-2010-and-sharepoint-2013.aspx" /><id>http://blogs.technet.com/b/rycampbe/archive/2013/06/07/ssl-sites-with-hostnames-in-sharepoint-2010-and-sharepoint-2013.aspx</id><published>2013-06-07T13:53:03Z</published><updated>2013-06-07T13:53:03Z</updated><content type="html">&lt;p&gt;As you implement SharePoint in your security-conscious enterprise, you'll run into a scalability issue: IIS 7.5 (Windows 2008 R2) requires dedicated IP addresses for each SSL site on each Web Front End.  Remember that SAML claims require end-to-end SSL – if you're using SAML, you're affected!
&lt;/p&gt;&lt;p&gt;Why is this a problem?  Consider the most basic SharePoint architecture with a single Web Application:
&lt;/p&gt;&lt;p style="text-align: center"&gt;&lt;img src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/3157.060713_5F00_1716_5F00_SSLSiteswit1.jpg" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;This architecture uses 4 IP address:  1 for the VIP and 3 for the Web Front Ends.  Next, you've followed the &lt;a href="http://technet.microsoft.com/en-us/library/cc262706(v=office.14).aspx"&gt;Best practices for My Sites&lt;/a&gt; article, and deployed MySites to a dedicated Web Application and you require SSL.  Your architecture is now:
&lt;/p&gt;&lt;p style="text-align: center"&gt;&lt;img src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/8787.060713_5F00_1716_5F00_SSLSiteswit2.jpg" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;The IP footprint has grown from 4 to 8.  If we added another web application requiring SSL, this would need a total of 12 IP addresses and there-in lines our scalability problem:  In SharePoint on IIS 7.5 (Windows 2008 R2), the traditional IP address footprint is calculated with the formula
&lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;(Number of Web Servers + Number of Network Load Balancer Devices) * Number of Web Applications
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;A bigger, hypothetical network of 5 servers, 3 web applications and 1 NLB, your IP footprint would be a whopping 18 IP Addresses!  In a non-SSL environment, you would just configure hostnames, but when you try to select the certificate in IIS 7.5, the hostname header gets grayed out:
&lt;/p&gt;&lt;p style="text-align: center"&gt;&lt;img src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/2018.060713_5F00_1716_5F00_SSLSiteswit3.jpg" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;So, what do we do?  NetSH.exe!  With NetSH, we can tell the machine to "encrypt traffic on &amp;lt;x&amp;gt; port with &amp;lt;y&amp;gt; certificate".  Combine it with a wildcard certificate and all IIS traffic will be encrypted with the port, but you can still use hostnames.  To execute, from an elevated command prompt, execute:
&lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;Certutil –store My
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Location the applicable certificate on the output and notate the hash value (we're going to need it!).  My hash is b063314fab008a45b5a1afb0f0dee45b59eb2584
&lt;/p&gt;&lt;p style="text-align: center"&gt;&lt;img src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/2388.060713_5F00_1716_5F00_SSLSiteswit4.jpg" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Now execute the NETSH command:
&lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;netsh http &lt;span style="color:#7030a0"&gt;add sslcert &lt;span style="color:#c00000"&gt;ipport=0.0.0.0:443 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;&lt;span style="color:#5b9bd5"&gt;certhash=b063314fab008a45b5a1afb0f0dee45b59eb2584 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;&lt;span style="color:#70ad47"&gt;appid={00112233-4455-6677-8899-AABBCCDDEEFF}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p style="text-align: center"&gt;&lt;img src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/5531.060713_5F00_1716_5F00_SSLSiteswit5.jpg" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;The command's breakdown:
&lt;/p&gt;&lt;p&gt;&lt;span style="color:#7030a0"&gt;add sslcert &lt;/span&gt;is self-explanatory
&lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;&lt;span style="color:red"&gt;ipport=0.0.0.0:443&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span style="color:#c00000"&gt;
		&lt;/span&gt;is telling NetSH  the command applies to &lt;em&gt;"all traffic from this machine on port 443"&lt;/em&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="color:#5b9bd5"&gt;&lt;pre&gt;&lt;code&gt;certhash=b063314fab008a45b5a1afb0f0dee45b59eb2584&lt;/code&gt;&lt;/pre&gt;
		&lt;/span&gt;is the applicable certificate
&lt;/p&gt;&lt;p&gt;&lt;span style="color:#70ad47"&gt;&lt;pre&gt;&lt;code&gt;appid={00112233-4455-6677-8899-AABBCCDDEEFF}&lt;/code&gt;&lt;/pre&gt;
		&lt;/span&gt;is an arbitrary GUID for identification.  Pick anything you want for this value!
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Or to summarize &lt;em&gt;"Encrypt all traffic on port 443 with this cert"&lt;/em&gt;.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Now we can create a web application in SharePoint, choosing an applicable host header and port 443:
&lt;/p&gt;&lt;p style="text-align: center"&gt;&lt;img src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/0272.060713_5F00_1716_5F00_SSLSiteswit6.jpg" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;Create your site collection and browse it.  Pull up the Certificate and wala!  You've had the certificate applied (Note, I did NOT go into IIS and choose the certificate!).
&lt;/p&gt;&lt;p style="text-align: center"&gt;&lt;img src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/6472.060713_5F00_1716_5F00_SSLSiteswit7.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;This approach only works if you have one-and-only-one certificate per server, usually in an extranet/intranet environment.  In a hosting environment, this may not be applicable unless all your sites are sharing an SSL certificate.  
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;em&gt;Question: Isn't this &lt;a href="http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-server-name-indication-sni-ssl-scalability"&gt;Server Name Indication&lt;/a&gt;, newly available in Windows 2012 / IIS8?
&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Answer: No.  SNI is a many (certificates)-to-many (sites) solution.  IIS7.5 cannot do SNI, but SNI can fulfill the same user scenario of this approach.  If you're running Windows 2012, use SNI.  If you're on Windows 2008 R2, use the above approach.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;em&gt;Question #2: I'm using dedicated IPs and want to switch to this approach.  How do I do it?
&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Answer: If you have sites currently using 443, netsh will give you an error.  To fix it, you need to remove all your 443 bindings and re-add them without certificates.  If you use the IIS Admin GUI to do it:
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Change the current port 443 binding to a new port (4433 for example)
&lt;/li&gt;&lt;li&gt;Create a new binding on 443 with the specified hostname (but do not select a certificate!)
&lt;/li&gt;&lt;li&gt;Delete the 4433 binding and proceed with your netsh commands
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;As an alternative, you could use APPCMD or PowerShell to do the same thing;  the end result is what's needed:  no bindings on 443 with specified certificates.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3577420" width="1" height="1"&gt;</content><author><name>Ryan Campbell</name><uri>http://blogs.technet.com/ryan.campbell_4000_outlook.com/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>SharePoint 2010 Architecture and Disaster Recovery – when to use UPRE and when to log ship</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/b/rycampbe/archive/2013/03/07/sharepoint-2010-architecture-and-disaster-recovery-when-to-use-upre-and-when-to-log-ship.aspx" /><id>http://blogs.technet.com/b/rycampbe/archive/2013/03/07/sharepoint-2010-architecture-and-disaster-recovery-when-to-use-upre-and-when-to-log-ship.aspx</id><published>2013-03-07T18:21:06Z</published><updated>2013-03-07T18:21:06Z</updated><content type="html">&lt;p&gt;The &lt;a href="http://technet.microsoft.com/en-us/library/cc678868(v=office.14).aspx"&gt;SharePoint 2010 Database types and descriptions&lt;/a&gt; TechNet article was recently updated (March 5&lt;sup&gt;th&lt;/sup&gt;, 2013) to allow log shipping the Profile and Social databases for the User Profile Service.  This change aligns SharePoint 2010 to match the similar TechNet article for &lt;a href="http://technet.microsoft.com/en-us/library/jj841106.aspx"&gt;SharePoint 2013&lt;/a&gt;.  To understand the change, it's important to understand the tight correlation between Managed Metadata Service (MMS), User Profile Service (UPS), Content Databases and how User Profile Replication Engine (UPRE) works.  Our goal architecture will be a Hot Standby Farm as discussed &lt;a href="http://technet.microsoft.com/en-us/library/ff628971(v=office.14).aspx"&gt;here&lt;/a&gt; and &lt;a href="http://technet.microsoft.com/en-us/library/ff628971.aspx"&gt;here&lt;/a&gt;.  In the Hot Standby environment, we're log shipping the Content and MMS databases with matching timings (Backup, Copy and Restore Agent Jobs all happen at the same time)
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;h2&gt;Obligatory warning…here comes the deep dive!
&lt;/h2&gt;&lt;p&gt;There are several fields in users' profile that leverage the MMS service.  Out of box, these include the Past Projects, Skills and Schools fields:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/4762.030813_5F00_1558_5F00_SharePoint21.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;These are free text fields and are used for a better search and social experience.  Leveraging UPS and MMS, users can identify all users with a particular skill set, or past alumni.  You can see all the terms that have been created by going to the Term Store Management:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/2727.030813_5F00_1558_5F00_SharePoint22.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;In the database, we can see the terms association across the MMS and UPS Profile databases:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/7360.030813_5F00_1558_5F00_SharePoint23.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="color:red"&gt;Note:  Do not run these on your production environment; they are only here to show the closely related the IDs and Terms across the databases.  Even with NOLOCK, it can affect the farm and put you in an unsupported state.  I crashed my MMS Service while getting these screenshots because of these queries
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;We can see the same tight association when we use an MMS column in a list in the content databases:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/8054.030813_5F00_1558_5F00_SharePoint24.png" alt=""/&gt;
		&lt;img src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/6232.030813_5F00_1558_5F00_SharePoint25.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;And in the database:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/2072.030813_5F00_1558_5F00_SharePoint26.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span style="color:red"&gt;Note:  Do not run these on your production environment; they are only here to show the closely related the IDs and Terms across the databases.  Even with NOLOCK, it can affect the farm and put you in an unsupported state.  I crashed my MMS Service while getting these screenshots because of these queries
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;The Managed Metadata Service application uses the GUID and TermID fields to provide all MMS functionality.  The column value is added for the end user to view without the need of another join on the list item.  Keeping the Managed Metadata Service's Database, the Content Database and the User Profile's Profile Database in sync is required for proper functionality of the environment.  
&lt;/p&gt;&lt;p&gt;If databases get out of sync, you'll have mixed results when using any MMS driven fields.  Some of the symptoms you'll see are:  the MMS fields are read/only (it's relying on the column value to populate for the end user instead of using the ID), all MMS driven functionality will cease (workflows, content type logic, etc.).  Search will start acting up when crawling users, social tagging/notes will fail intermittently and other issues will manifest.  
&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/3857.clip_5F00_image001_5F00_thumb1_5F00_0A720AD6.png"&gt;&lt;img src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/2364.clip_5F00_image001_5F00_thumb1_5F00_thumb_5F00_176BEAE7.png" alt="" border="0"/&gt;&lt;/a&gt;
	&lt;/p&gt;&lt;p&gt;&lt;em&gt;The real problem is that you won't know this is happening until you try and use the secondary farm!&lt;/em&gt;  Think about that for a moment:  your primary farm is offline, the secondary farm is brought online and large components of the farms are inoperable.  THAT will not be a fun day.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;lt;&amp;lt; Obligatory warning over &amp;gt;&amp;gt;
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;h2&gt;The UPRE Gap: (Spoiler – UPRE is unreliable if the MMS Database is Read/Only) 
&lt;/h2&gt;&lt;p&gt;The key to a viable standby farm requires that the Profile Database, the Managed Metadata Database and the Content database are in sync.  Until recently, the only way to accomplish a standby farm was to log ship the Content and MMS databases, but use UPRE for the Profiles.  This kept the Content and MMS databases in sync, but Profiles (UPS) was in a constant state of flux.  Consider these scenarios:
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Scenario: MMS log is applied during UPRE run
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Outcome: all updates for that run would fail as UPRE would not be able to access the MMS Database.  
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Scenario: a user adds a new MMS term to their profile and UPRE ran before the MMS log ship
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;UPRE will try to add the MMS term at the destination farm and fail due to the database being in Read-Only (because of log shipping)
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Traditionally, the answer has included some kind of timing solution and ignoring the UPRE errors that occur in the second scenario.  But this isn't a true hot standby; a large portion of your farm (profiles) are in a state of flux, you can't be sure of their current state.  If the hot standby has an RTO/RPO of less than an hour, but you've implemented a timing solution (for example, UPRE run every 24 hours and MMS log updates are paused) then you've already missed your RTO/RPO SLAs by your own design!
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;h2&gt;How to choose when to UPRE and when to Log Ship:
&lt;/h2&gt;&lt;p&gt;The decision to UPRE or to Log Ship the Profile and Social databases is influenced by several factors:  Volume of Social Data, RPO/RTO, Disaster Recovery you're leveraging (Hot/Warm/Cold).   To guide the decision, we have to ask several questions:
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;How are we using the secondary farm?
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Is it a Hot Standby?  Or another active farm that needs Profile information?
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;(Assuming it's a Hot Standby) What is the RPO and RTO times for the secondary farm?
&lt;/li&gt;&lt;li&gt;&lt;div&gt;(Assuming it's a Hot Standby) Is there a difference in timing between UPRE and Log Shipping?
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Can both UPRE and Log Shipping complete within the RPO and RTO window?
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;How critical are User Profiles?  Are they deemed critical enough to have the same uptime and availability as the content databases?
&lt;/li&gt;&lt;li&gt;What is the state of the secondary farm's MMS Database (read-write or read-only)?
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Answering these questions will quickly favor UPRE or Log Shipping.  Consider these two scenarios:
&lt;/p&gt;&lt;h3&gt;Scenario A: 
&lt;/h3&gt;&lt;p&gt;Consider you have 2 regional farms deployed, one in London and one in Seattle.   Both farms are serving content to users, but Profiles from Seattle Farm are needed at the London Farm.  The answers to our questions are as follows:
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;How are we using the secondary farm? &lt;span style="color:red"&gt;Another active Farm that needs Profile information&lt;/span&gt;
		&lt;/li&gt;&lt;li&gt; (Assuming it's a Hot Standby) What is the RPO and RTO times for the secondary farm? &lt;span style="color:red"&gt;N/A – it's not a Hot Standby&lt;/span&gt;
		&lt;/li&gt;&lt;li&gt;&lt;div&gt;(Assuming it's a Hot Standby) Is there a difference in timing between UPRE and Log Shipping? &lt;span style="color:red"&gt;N/A – it's not a Hot Standby&lt;/span&gt;
			&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Can both UPRE and Log Shipping complete within the RPO and RTO window? &lt;span style="color:red"&gt;N/A – it's not a Hot Standby&lt;/span&gt;
				&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;How critical are User Profiles?  Are they deemed critical enough to have the same uptime and availability as the content databases?  &lt;span style="color:red"&gt;No&lt;/span&gt;
		&lt;/li&gt;&lt;li&gt;What is the state of the secondary farm's MMS Database (read-write or read-only)? &lt;span style="color:red"&gt;Read-Write&lt;/span&gt;
		&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Since the London Farm's MMS database is Read/Write and is an active farm requiring profile information from Seattle Farm, UPRE would be our choice.  UPRE would be able to add terms to the MMS Database and would not be susceptible to disconnection of a log restore of the MMS database.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/0358.030813_5F00_1558_5F00_SharePoint27.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Note:  this is NOT a DR/Hot-Standby solution.  This is merely two farms that hold separate information, but the London Farm needs the Seattle Farm's profiles for a business need.
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;h3&gt;Scenario B: 
&lt;/h3&gt;&lt;p&gt;Consider the same 2 regional farms deployment, a farm in London and a farm in Seattle.   All users access the Seattle Farm; the London farm is used if the Seattle farm is unavailable due to maintenance or downtime.  The answers to our questions are as follows:
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;How are we using the secondary farm? &lt;span style="color:red"&gt;Hot-Standby&lt;/span&gt;
		&lt;/li&gt;&lt;li&gt;(Assuming it's a Hot Standby) What is the RPO and RTO times for the secondary farm? &lt;span style="color:red"&gt;45 minutes and 30 minutes&lt;/span&gt;
		&lt;/li&gt;&lt;li&gt;&lt;div&gt;(Assuming it's a Hot Standby) Is there a difference in timing between UPRE and Log Shipping? &lt;span style="color:red"&gt;No difference in timing between UPRE and Log Shipping&lt;/span&gt;
			&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Can both UPRE and Log Shipping complete within the RPO and RTO window? &lt;span style="color:red"&gt;Yes&lt;/span&gt;
				&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;How critical are User Profiles?  Are they deemed critical enough to have the same uptime and availability as the content databases?  &lt;span style="color:red"&gt;Yes&lt;/span&gt;
		&lt;/li&gt;&lt;li&gt;What is the state of the secondary farm's MMS Database (read-write or read-only)? &lt;span style="color:red"&gt;Read-Only&lt;/span&gt;
		&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Since the London Farm's MMS database is Read/Only and is Hot-Standby of the Seattle Farm, Log Shipping the Profile and Social databases would be our choice.  Log Shipping allows us to have a consistent point-in-time on the secondary farm without being affected by the database disconnects that would plague UPRE in this same scenario.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33-metablogapi/8244.030813_5F00_1558_5F00_SharePoint28.png" alt=""/&gt;
	&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Note:  this is a DR/Hot-Standby solution.  Seattle Farm is log shipping all the content, MMS and UPS databases to the London farm.
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Note:  it's critical that your databases (Content, MMS, Profile and Social) are all in sync in this scenario.  Make sure the timing on your SQL Agent Jobs all match! 
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;h2&gt;Is there ever a time to use UPRE instead of Log Shipping in a Hot Standby?
&lt;/h2&gt;&lt;p&gt;Absolutely!  Here are a few scenarios where UPRE could be chosen instead of Log Shipping:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;UPRE gives us the flexibility to pick and choose specific profile fields to synchronize and Log Shipping is all or nothing.  If there was a business or security need to reduce the properties to a smaller subset, then UPRE would be a better decision.
&lt;/li&gt;&lt;li&gt;If we are space constrained on the secondary farm, UPRE would be a better decision; log shipping requires more space on the secondary farm to hold the backup of the transaction log.
&lt;/li&gt;&lt;li&gt;&lt;div&gt;If the 3 SQL Agent Jobs associated with Log Shipping exceed the RTO/RPO SLAs, UPRE would be the better decision
&lt;/div&gt;&lt;ul&gt;&lt;li&gt;This can happen if you are heavily using SharePoint's social features.  
&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
 &lt;/p&gt;&lt;h2&gt;Summary:
&lt;/h2&gt;&lt;p&gt;With the option to Log Ship the Profile and Social databases, we have greater flexibility to meet the business' needs to provide a reliable and consistent user experience.  Choosing when to Log Ship and when to UPRE, as well as the pros and cons of each, is critical to ensure your architecture is working as expected.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3557207" width="1" height="1"&gt;</content><author><name>Ryan Campbell</name><uri>http://blogs.technet.com/ryan.campbell_4000_outlook.com/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Find all list items with multiple values used</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/b/rycampbe/archive/2012/07/26/find-all-list-items-with-multiple-values-used.aspx" /><id>http://blogs.technet.com/b/rycampbe/archive/2012/07/26/find-all-list-items-with-multiple-values-used.aspx</id><published>2012-07-26T17:28:00Z</published><updated>2012-07-26T17:28:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I was working with Russ today and an interesting question came up:&amp;nbsp; If a user had a list with a multivalue column, how do we find all the list items with more than 1 value selected?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;After much trial and error, LINQ was the simplest to implement.&amp;nbsp; Here's the list we used:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/7701.List.JPG"&gt;&lt;img alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/7701.List.JPG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Testcol is a multi value column and thus our expected result was to return the Recipe #2 and Recipe #4 items.&amp;nbsp; Returning #3 or #1 was a fail.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;On the backend, SharePoint splits it's values with a #; combination.&amp;nbsp; We can see this using the u2u CAML builder:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/8228.u2u.JPG"&gt;&lt;img alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/8228.u2u.JPG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So the resultant code was a LINQ query with a split on the ;# values:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;SPSite&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt; oSite = &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;SPSite&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#a31515"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#a31515"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#a31515"&gt;"http://VM-SP2010/"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;SPWeb&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt; oWeb = oSite.RootWeb)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPList&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt; oList = oWeb.Lists[&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#a31515"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#a31515"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#a31515"&gt;"TestList"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;List&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;SPListItem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&amp;gt; items = (&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;from&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt; l &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;in&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt; oList.Items.OfType&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;SPListItem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&amp;gt;() &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;where&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt; l[&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#a31515"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#a31515"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#a31515"&gt;"Testcol"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;].ToString().Split(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;[] { &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#a31515"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#a31515"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#a31515"&gt;";#"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt; }, &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;StringSplitOptions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;.None).Length &amp;gt; 3 &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;select&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt; l).ToList&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;SPListItem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&amp;gt;();&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;foreach&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;SPListItem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt; item &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;&lt;span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#0000ff"&gt;in&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt; items)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;Console&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;.WriteLine(item.DisplayName);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;Console&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;.WriteLine(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#a31515"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#a31515"&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#a31515"&gt;"All done!"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: x-small;" face="Consolas" size="2" color="#2b91af"&gt;Console&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;.ReadLine(); &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And the final result:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/1030.Result.JPG"&gt;&lt;img alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/1030.Result.JPG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3511064" width="1" height="1"&gt;</content><author><name>BigTallCampbell</name><uri>http://blogs.technet.com/bigtallcampbell_4000_gmail.com/ProfileUrlRedirect.ashx</uri></author><category term="List" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/List/" /><category term="MultiValue" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/MultiValue/" /><category term="LINQ" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/LINQ/" /><category term="C#" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/C_2300_/" /><category term="SharePoint" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/SharePoint/" /></entry><entry><title>Hyper-V Slow Host Network - How to Fix</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/b/rycampbe/archive/2012/06/11/hyper-v-slow-host-network-how-to-fix.aspx" /><id>http://blogs.technet.com/b/rycampbe/archive/2012/06/11/hyper-v-slow-host-network-how-to-fix.aspx</id><published>2012-06-11T17:50:00Z</published><updated>2012-06-11T17:50:00Z</updated><content type="html">&lt;p&gt;Last week I installed the latest version of Windows 8 RP;&amp;nbsp; I was really excited to see Hyper-V and a desktop OS together.&amp;nbsp; It's been running great, but I noticed a peculiar issue:&amp;nbsp; whenever my VM-DC virtual machine (which hosts AD, DNS and DHCP) was running, my host DNS requests would creep and every request added 5 seconds.&amp;nbsp; I suspected my VM-DC machine was getting the request first and rejecting it (VM-DC has no internet access), but I couldn't figure out why.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To validate, I started WireShark and made an nslookup DNS request.&amp;nbsp; Sure enough, VM-DC got the request first, returned back a bad hostname and then my normal DNS server got the request.&amp;nbsp; From there, I went to make sure my DNS entry didn't get into my External NIC configuration:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Ethernet adapter vEthernet (External LAN):&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Connection-specific DNS Suffix&amp;nbsp; . : &lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #2&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Physical Address. . . . . . . . . : D0-67-E5-38-18-8C&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; DHCP Enabled. . . . . . . . . . . : Yes&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Autoconfiguration Enabled . . . . : Yes&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Link-local IPv6 Address . . . . . : fe80::c0c1:ae76:bdbe:5c9e%19(Preferred) &lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; IPv4 Address. . . . . . . . . . . : 192.168.10.1(Preferred) &lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Subnet Mask . . . . . . . . . . . : 255.255.255.0&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Lease Obtained. . . . . . . . . . : Monday, June 11, 2012 12:09:00 PM&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Lease Expires . . . . . . . . . . : Tuesday, June 19, 2012 12:08:59 PM&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Default Gateway . . . . . . . . . : 192.168.10.254&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; DHCP Server . . . . . . . . . . . : 192.168.10.254&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; DHCPv6 IAID . . . . . . . . . . . : 399534053&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-17-5A-B2-7C-D0-67-E5-38-18-8C&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; DNS Servers . . . . . . . . . . . : 192.168.10.254&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; NetBIOS over Tcpip. . . . . . . . : Enabled&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Ethernet adapter vEthernet (External WiFi):&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Media State . . . . . . . . . . . : Media disconnected&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Connection-specific DNS Suffix&amp;nbsp; . : gateway.2wire.net&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #3&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Physical Address. . . . . . . . . : 00-24-D7-C8-20-34&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; DHCP Enabled. . . . . . . . . . . : Yes&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Autoconfiguration Enabled . . . . : Yes&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Ethernet adapter vEthernet (Internal LAN):&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Connection-specific DNS Suffix&amp;nbsp; . : VM.local&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #4&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Physical Address. . . . . . . . . : 00-15-5D-01-4C-00&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; DHCP Enabled. . . . . . . . . . . : Yes&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Autoconfiguration Enabled . . . . : Yes&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Link-local IPv6 Address . . . . . : fe80::2c1d:8047:d6a:f39b%21(Preferred) &lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; IPv4 Address. . . . . . . . . . . : 192.168.250.101(Preferred) &lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Subnet Mask . . . . . . . . . . . : 255.255.255.0&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Lease Obtained. . . . . . . . . . : Monday, June 11, 2012 1:19:24 PM&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Lease Expires . . . . . . . . . . : Tuesday, June 19, 2012 1:19:23 PM&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; Default Gateway . . . . . . . . . : &lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; DHCP Server . . . . . . . . . . . : 192.168.250.1&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; DHCPv6 IAID . . . . . . . . . . . : 805311837&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-17-5A-B2-7C-D0-67-E5-38-18-8C&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; DNS Servers . . . . . . . . . . . : 192.168.250.1&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp; NetBIOS over Tcpip. . . . . . . . : Enabled&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As you can see, VM-DC (192.168.250.1) is definitely not on my External LAN NIC.&amp;nbsp; So why is it still getting the initial DNS request?&amp;nbsp; Next I went into the Network Adapters, hit ALT, looked at the binding settings and EUREKA:&amp;nbsp; my Internal LAN NIC was listed before my External LAN NIC.&amp;nbsp; A quick reorder to give my External LAN priority and solved the DNS latency problem.&amp;nbsp; Now my host browses the internet as fast with and without my VM-DC booted.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/7506.Advanced-Network-Settings.jpg"&gt;&lt;img alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/7506.Advanced-Network-Settings.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;BEFORE:&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/0167.NIC_2D00_Before.jpg"&gt;&lt;img alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/0167.NIC_2D00_Before.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;AFTER:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/0537.NIC_2D00_After.jpg"&gt;&lt;img alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/0537.NIC_2D00_After.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I'm not sure what set my Internal NIC with higher priority than my External NIC, but if it happens to you, this'll help!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3503230" width="1" height="1"&gt;</content><author><name>BigTallCampbell</name><uri>http://blogs.technet.com/bigtallcampbell_4000_gmail.com/ProfileUrlRedirect.ashx</uri></author><category term="Virtualization" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/Virtualization/" /><category term="Slow" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/Slow/" /><category term="NIC" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/NIC/" /><category term="Hyper-V" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/Hyper_2D00_V/" /><category term="HyperV" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/HyperV/" /><category term="HOST" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/HOST/" /><category term="Windows 8" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/Windows+8/" /><category term="DNS" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/DNS/" /><category term="Network" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/Network/" /></entry><entry><title>Database Attach breaks Alerts and the fix!</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/b/rycampbe/archive/2012/01/03/database-attach-breaks-alerts-and-the-fix.aspx" /><link rel="enclosure" type="text/plain" length="324" href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-03-47-37-73/AlertFix.txt" /><id>http://blogs.technet.com/b/rycampbe/archive/2012/01/03/database-attach-breaks-alerts-and-the-fix.aspx</id><published>2012-01-03T20:17:26Z</published><updated>2012-01-03T20:17:26Z</updated><content type="html">&lt;p&gt;I got a query from a colleague about Alerts and went to test it.&amp;nbsp; To my surprise, my test Alerts weren't working and after some troubleshooting I discovered it was due to my upgrade.&lt;/p&gt;
&lt;p&gt;The fix is pretty quick - just download the txt file, rename to PS1 and call it with the WebApp url.&amp;nbsp; It does little move than change the title of all alerts and changes it back.&amp;nbsp; This triggers the alert to be rewritten and handled correctly in 2010.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;For my example, my 2007 DB was attached and upgraded to &lt;a href="http://VM-SP2010A"&gt;http://VM-SP2010A&lt;/a&gt;, so my call was:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;.\AlertFix.ps1 &lt;a href="http://VM-SP2010A"&gt;http://VM-SP2010A&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;HTH&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3473773" width="1" height="1"&gt;</content><author><name>BigTallCampbell</name><uri>http://blogs.technet.com/bigtallcampbell_4000_gmail.com/ProfileUrlRedirect.ashx</uri></author><category term="2007 2010 Database Attach Alerts Fix" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/2007+2010+Database+Attach+Alerts+Fix/" /></entry><entry><title>Post June 2011 CU Move-SPProfileManagedMetadataProperty BUG - and the workaround</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/b/rycampbe/archive/2011/11/22/june-2011-cu-move-spprofilemanagedmetadataproperty-bug-and-the-workaround.aspx" /><id>http://blogs.technet.com/b/rycampbe/archive/2011/11/22/june-2011-cu-move-spprofilemanagedmetadataproperty-bug-and-the-workaround.aspx</id><published>2011-11-22T16:38:00Z</published><updated>2011-11-22T16:38:00Z</updated><content type="html">&lt;p&gt;If you're upgrading from SharePoint 2010 and following the post upgrade steps from &lt;strong&gt;&lt;a title="Perform post-upgrade steps for a database attach upgrade (SharePoint Server 2010)" href="http://technet.microsoft.com/en-us/library/cc263286.aspx"&gt;Perform post-upgrade steps for a database attach upgrade (SharePoint Server 2010)&lt;/a&gt;&lt;/strong&gt;, you'll need to upgrade your multi string values from your old 2007 SSP to 2010 MMS.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Let's have a little background on why we have this. Here's a screenshot of the old values in the Responsibilities Field:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/0167.Capture.JPG"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/0167.Capture.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In previous 2007, I'd have to free text search for "SharePoint 2007" and again for "Migration" if I wanted to find this user.&amp;nbsp; If I wanted to search for both, our results could get skewed as users could have those terms in different order.&amp;nbsp; Is it possible?&amp;nbsp; Yes.&amp;nbsp; Is it easy?&amp;nbsp; No.&amp;nbsp; New with 2010 is the Managed Metadata service which eliminates this problem.&amp;nbsp; With the individual fields set to metadata, we enable the search refiners in SharePoint 2010 and the order is no longer an issue.&amp;nbsp; Is it simpler?&amp;nbsp; Absolutely.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;While upgrading, there is a Powershell script to migrate the flat text field of the SSP 2007 to MMS in your new SharePoint 2010 environment called &lt;em&gt;Move-SPProfileManagedMetadataProperty&lt;/em&gt;.&amp;nbsp; Unfortunately, if you are post June CU, there's a bug where you'll get this error message:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Move-SPProfileManagedMetadataProperty -ProfileServiceApplicationProxy&amp;nbsp;&amp;lt;GUID&amp;gt; -Identity&amp;nbsp;&amp;lt;Name of Field&amp;gt;&amp;nbsp;-AvailableForTagging -TermSetName Responsibility&lt;/strong&gt;&lt;br /&gt;&lt;span style="color: #ff0000;"&gt;&lt;em&gt;Move-SPProfileManagedMetadataProperty : UPDATE failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations.&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000;"&gt;At line:1 char:38&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000;"&gt;+ Move-SPProfileManagedMetadataProperty &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;nbsp; -ProfileServiceApplicationProxy 9&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000;"&gt;1740c45-b8c2-4ade-85bb-344f2a4eca47 -Identity SPS-Responsibility -AvailableForT&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000;"&gt;agging -TermSetName Responsibility&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; + CategoryInfo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : InvalidData: (Microsoft.Offic...ProfileProperty:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000;"&gt;&amp;nbsp;&amp;nbsp; SPCmdletMigrate...ProfileProperty) [Move-SPProfileManagedMetadataProperty]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000;"&gt;&amp;nbsp; , SqlException&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; + FullyQualifiedErrorId : Microsoft.Office.Server.UserProfiles.PowerShell.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000;"&gt;&amp;nbsp;&amp;nbsp; SPCmdletMigrateDataForOneTaxonomicProfileProperty&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;If you BING search, you'll find that the Quoted Identifier is used to isolate quotes (") and apostrophes (') and this flag helps protect against SQL Injection attacks in SharePoint.&amp;nbsp; You'll also find (as stated here &lt;a href="http://social.technet.microsoft.com/Forums/en-US/sharepoint2010setup/thread/6fdb0ca3-5ac5-45ab-8663-af536e6dae24"&gt;http://social.technet.microsoft.com/Forums/en-US/sharepoint2010setup/thread/6fdb0ca3-5ac5-45ab-8663-af536e6dae24)&lt;/a&gt; that modifying the database works.&amp;nbsp; THIS PUTS YOU IN AN UNSUPPORTED STATE AND SHOULD NOT BE DONE WITHOUT MICROSOFT SUPPORT APPROVING THE CHANGE.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;"Ok Ryan, so what's the fix?"&amp;nbsp; In short: we get around the &lt;strong&gt;Move-SPProfileManagedMetadataProperty &lt;/strong&gt;bug by not using it!&amp;nbsp; Enter the User Profile Replication Engine (from the SharePoint Administration Toolkit: &lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=20022"&gt;http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=20022&lt;/a&gt;).&amp;nbsp; The User Profile Replication Engine (or UPRE) has a -DoUpgrade switch which migrates the 2007 strings to 2010 MMS.&amp;nbsp; To make this work, you must have the old 2007 farm and new 2010 farm both online.&amp;nbsp; My old 2007 MySite Host is &lt;a href="http://vm-moss:10378/"&gt;http://vm-moss:10378/&lt;/a&gt; and my new 2010 MySite Host is &lt;a href="http://vm-sp2010:13965/"&gt;http://vm-sp2010:13965/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;Here's the walkthrough (Note: my SharePoint 2010 environment is called VM-SP2010.&amp;nbsp; My SharePoint 2007 environment is called VM-MOSS):&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;1) Install the SharePoint Administration Toolkit&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;2) Create an Managed Metadata Service (MMS) and User Profile Service (UPS) in the same proxy group (the same group is how the UPS knows which MMS to utilize)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;3) Assign the proxy group to your 2010 MySite Host Web Application.&amp;nbsp; You can see here that my Web App is "SharePoint 2007MySites - 13965" and I have the MMS and UPS assisgned&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/4035.Capture.JPG"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/4035.Capture.JPG" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;4) Make yourself an administrator and full control to the &lt;strong&gt;MMS and UPS&lt;/strong&gt; at _admin/ServiceApplications.aspx &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/4237.Capture.JPG"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/4237.Capture.JPG" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/4578.Capture.JPG"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/4578.Capture.JPG" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;5) Start the UPRE and type in this Powershell command:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;get-spprofilepropertycollection -source&amp;nbsp;&amp;lt;2007 MySite Host URL&amp;gt;&amp;nbsp;| start-spprofileservicefullreplication -source &amp;lt;2007 MySite Host URL&amp;gt;&amp;nbsp;-destination &amp;lt;2010 MySite Host URL&amp;gt;&amp;nbsp; -MaxNumberOfThreads 3 -DoUpgrade&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So, for my environment, I used:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;get-spprofilepropertycollection -source &lt;a href="http://vm-moss:10378/"&gt;http://vm-moss:10378/&lt;/a&gt; | start-spprofileservicefullreplication -source &lt;a href="http://vm-moss:10378/"&gt;http://vm-moss:10378/&lt;/a&gt; -destination &lt;a href="http://vm-sp2010:13965/"&gt;http://vm-sp2010:13965/&lt;/a&gt;&amp;nbsp; -MaxNumberOfThreads 3 -DoUpgrade&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/0876.Capture.JPG"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/0876.Capture.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;And hit enter.&amp;nbsp; Wait for it to start enumerating profiles to insure you don't have any errors.&amp;nbsp; A full replication takes quite a while (1000 users on my environment took about 5 minutes).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;6) Once complete, verify the multi-value property has been updated correctly by viewing a profile.&amp;nbsp; In this case, we'll use Administrator.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/3443.Capture.JPG"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/3443.Capture.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It works!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And there you have it.&amp;nbsp; If you have custom properties in 2007, you'll need to have the same custom properties in 2010.&amp;nbsp; The easiest way to do this is backup and restore your SSP database to 2010, then use it as the name of your &lt;strong&gt;Profile DB &lt;/strong&gt;when you create your UPS.&amp;nbsp; That'll upgrade the DB to 2010 and bring your properties over.&amp;nbsp; From there,run a full import with UPRE following the steps above.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Problems with the UPRE need to be troubleshooted and then a recovery run.&amp;nbsp; Check out &lt;a href="http://technet.microsoft.com/en-us/library/cc663011.aspx"&gt;http://technet.microsoft.com/en-us/library/cc663011.aspx&lt;/a&gt; for steps to do that.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Hope this helps someone out there.&amp;nbsp; Any problems, let me know!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3466680" width="1" height="1"&gt;</content><author><name>BigTallCampbell</name><uri>http://blogs.technet.com/bigtallcampbell_4000_gmail.com/ProfileUrlRedirect.ashx</uri></author><category term="SharePoint 2010" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/SharePoint+2010/" /><category term="June 2011 CU" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/June+2011+CU/" /><category term="SSP" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/SSP/" /><category term="UPDATE failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/UPDATE+failed+because+the+following+SET+options+have+incorrect+settings_3A00_+_2700_QUOTED_5F00_IDENTIFIER_2700_/" /><category term="Move-SPProfileManagedMetadataProperty" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/Move_2D00_SPProfileManagedMetadataProperty/" /><category term="Database" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/Database/" /><category term="Attach" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/Attach/" /></entry><entry><title>Changing the Application Pool on a Web Application the right way</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/b/rycampbe/archive/2011/08/31/changing-the-application-pool-on-a-web-application-the-right-way.aspx" /><id>http://blogs.technet.com/b/rycampbe/archive/2011/08/31/changing-the-application-pool-on-a-web-application-the-right-way.aspx</id><published>2011-08-31T14:17:00Z</published><updated>2011-08-31T14:17:00Z</updated><content type="html">&lt;p&gt;I was working a farm today that had 10 web applications, all with their own application pool.&amp;nbsp; As we know from &lt;a href="http://technet.microsoft.com/en-us/library/cc262787.aspx#WebserverAppServer"&gt;http://technet.microsoft.com/en-us/library/cc262787.aspx#WebserverAppServer&lt;/a&gt; , the recommended limit is 10 application pools per WFEs and with the addition of the Web Services App pool, the CA app pool and others, we were over our limit.&amp;nbsp; Our performance was suffering and we needed a way to consolidate the web application app pools.&lt;/p&gt;
&lt;p&gt;Before SharePoint, we'd just open IIS Manager and update the application pool.&amp;nbsp; But now that's not the correct way: SharePoint doesn't know anything about the change.&amp;nbsp; Imagine in 2 years from now when you add another WFE - SharePoint would think that we have 10 application pools and would provision them all on the new WFE correctly.&amp;nbsp; Then you'd have to go in and change them.&amp;nbsp; What a maintenance nightmare this would be!&lt;/p&gt;
&lt;p&gt;To do it correctly, we'll leverage this PowerShell snippet:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;$sourceWebAppPool = (Get-SPWebApplication &amp;lt; URL a webapp who&amp;rsquo;s application pool you want to use&amp;gt;).ApplicationPool&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;$webApp = Get-SPWebApplication &amp;lt; URL of the web application you want to change&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;$webApp.ApplicationPool = $sourceWebAppPool&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;$webApp.ProvisionGlobally()&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;$webApp.Update()&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;iisreset&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here's an example:&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In my environment, I have 2 web applications: //VM-SP2010:26927 and //VM-SP2010:4150.&amp;nbsp; I want :26972 to use the same application pool as :4150.&amp;nbsp; So my PS is:&lt;/p&gt;
&lt;p&gt;$sourceWebAppPool = (Get-SPWebApplication &lt;a href="http://VM-SP2010:4150).ApplicationPool"&gt;http://VM-SP2010:4150).ApplicationPool&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;$webApp = Get-SPWebApplication &lt;a href="http://VM-SP2010:26927"&gt;http://VM-SP2010:26927&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;$webApp.ApplicationPool = $sourceWebAppPool&lt;/p&gt;
&lt;p&gt;$webApp.ProvisionGlobally()&lt;/p&gt;
&lt;p&gt;$webApp.Update()&lt;/p&gt;
&lt;p&gt;IISReset&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;&lt;v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"&gt;&lt;/v:shapetype&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;&lt;v:shapetype stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"&gt;Before:&lt;/v:shapetype&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;&lt;v:shapetype stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/0243.Before.png"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/0243.Before.png" /&gt;&lt;/a&gt;&lt;/v:shapetype&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And&amp;nbsp;After:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/0042.After.png"&gt;&lt;img border="0" alt="" src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-90-33/0042.After.png" /&gt;&lt;/a&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;br /&gt;&amp;nbsp;&lt;v:formulas&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;v:f eqn="sum @0 1 0"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;/v:stroke&gt;&lt;/p&gt;
&lt;p&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;/v:stroke&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;v:f eqn="sum @0 1 0"&gt;Now the change is saved in the config DB and any new WFEs we add will have the correct settings.&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;/v:stroke&gt;&lt;/p&gt;
&lt;p&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;/v:stroke&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;v:f eqn="sum @0 1 0"&gt;HTH&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;/v:stroke&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;v:f eqn="prod @2 1 2"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;v:f eqn="sum @0 0 1"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;v:f eqn="prod @6 1 2"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;br /&gt;&amp;nbsp;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/v:f&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;v:shape style="width: 6in; height: 162pt;" id="_x0000_i1025" type="#_x0000_t75" alt=""&gt;&lt;br /&gt; &lt;v:imagedata o:href="cid:image006.png@01CC676E.F51A8080" src="file:///C:\Users\Ryan\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png"&gt;&lt;br /&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3450354" width="1" height="1"&gt;</content><author><name>BigTallCampbell</name><uri>http://blogs.technet.com/bigtallcampbell_4000_gmail.com/ProfileUrlRedirect.ashx</uri></author><category term="SharePoint 2010" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/SharePoint+2010/" /><category term="Web Application" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/Web+Application/" /><category term="PowerShell" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/PowerShell/" /><category term="Changing Application Pool" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/Changing+Application+Pool/" /><category term="Application Pool" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/Application+Pool/" /></entry><entry><title>Virtualization, the SAN and why one big RAID 5 array is wrong.</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/b/rycampbe/archive/2011/08/23/virtualization-the-san-and-why-one-big-raid-5-array-is-wrong.aspx" /><id>http://blogs.technet.com/b/rycampbe/archive/2011/08/23/virtualization-the-san-and-why-one-big-raid-5-array-is-wrong.aspx</id><published>2011-08-23T16:04:00Z</published><updated>2011-08-23T16:04:00Z</updated><content type="html">&lt;p&gt;Today I've had no less than 3 ad hoc conversations about disk sharing for VMs.&amp;nbsp; This isn't about RAID5 versus RAID10, specific performance requirements for SharePoint, or cache for simultaneous read/write requests.&amp;nbsp; This is simply aimed at giving SharePoint admins the knowledge to take to the SAN admins to insure a successful SharePoint deployment via best practices.&amp;nbsp; Our focus is on SQL server in this scenario, but the concepts are applicable.&amp;nbsp; Ready...let's dive in.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;First of all, some definitions:&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="107"&gt;
&lt;p&gt;&lt;b&gt;Term&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="1026"&gt;
&lt;p&gt;&lt;b&gt;Definition&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="107"&gt;
&lt;p&gt;&lt;b&gt;SAN&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="1026"&gt;
&lt;p&gt;Acronym for &lt;b&gt;Storage Area Network&lt;/b&gt;.&amp;nbsp; It&amp;rsquo;s a Physical device used to extend storage space. The SAN is the parent device for all disk IO&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="107"&gt;
&lt;p&gt;&lt;b&gt;Enclosure&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="1026"&gt;
&lt;p&gt;Each SAN is made up of enclosures.&amp;nbsp; It&amp;rsquo;s a physical part of the SAN and is the device holding all the hard drives.&amp;nbsp; Normally, a set of fiber channels, iSCSI channels, HBAs and other miscellaneous hardware is attached to each enclosure.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="107"&gt;
&lt;p&gt;&lt;b&gt;Hard drive&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="1026"&gt;
&lt;p&gt;Regular hard drive you&amp;rsquo;re familiar with.&amp;nbsp; You know - that spinny thing (or if you're really good, not spinny thing)&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="107"&gt;
&lt;p&gt;&lt;b&gt;RAID Array&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="1026"&gt;
&lt;p&gt;Normally RAID 5 when we discuss SANs, a RAID Array is a grouping of Hard drive (all within the same enclosure) to provide fault tolerance.&amp;nbsp; In the event a hard drive goes down, no loss of data is experienced.&amp;nbsp; In a RAID 5, your disk size is measured by: Size of Drives * (Number of Drives - 1).&amp;nbsp; Minimum number of disks for RAID5 is 3 &amp;ndash; 2 for the data and one for the parity.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="107"&gt;
&lt;p&gt;&lt;b&gt;LUN&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="1026"&gt;
&lt;p&gt;Acronym for &lt;b&gt;Logical Unit Number. &lt;/b&gt;A LUN is logical section of a RAID array and is the actual drive letter that is exposed to Windows.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="107"&gt;
&lt;p&gt;&lt;b&gt;IOPS&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="1026"&gt;
&lt;p&gt;Acronym for &lt;b&gt;Input/Output Operations per Second.&amp;nbsp; &lt;/b&gt;IOPS is a measurement of the performance of a disk (or Array).&amp;nbsp; To calculate IOPS, we can use h&lt;a href="http://blogs.technet.com/b/cotw/archive/2009/03/18/analyzing-storage-performance.aspx"&gt;ttp://blogs.technet.com/b/cotw/archive/2009/03/18/analyzing-storage-performance.aspx&lt;/a&gt;,&amp;nbsp; or a much easier method: SQLIO.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="107"&gt;
&lt;p&gt;&lt;b&gt;SQLIO&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="1026"&gt;
&lt;p&gt;A disk benchmarking utility which gives results in IOPS for different loads.&amp;nbsp; &lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=20163"&gt;http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=20163&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="107"&gt;
&lt;p&gt;&lt;b&gt;Bandwidth&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="1026"&gt;
&lt;p&gt;The theoretical maximum of a given resource without any additional load.&amp;nbsp; Imagine bandwidth as a 4 lane highway without traffic with a 70mph speed limit.&amp;nbsp; As law abiding citizens, we can drive up to 70mph all the time.&amp;nbsp; To go 10 miles will take 8.5 minutes every time because we&amp;rsquo;re always traveling 70 mph.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="107"&gt;
&lt;p&gt;&lt;b&gt;Throughput&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="1026"&gt;
&lt;p&gt;The actual maximum of a given resource with additional load factored in.&amp;nbsp; Imagine throughput as a 4 lane high WITH traffic with a 70mph speed limit.&amp;nbsp; But because of congestion the actual speed we can travel varies from 45mph to 70mph. It&amp;rsquo;s never the exact same.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now every SAN administrator has some brochure, or PDF, or something from there SAN vendor that says: &lt;em&gt;&lt;strong&gt;For peak performance, create one RAID array of all the hard drives in the enclosure.&lt;/strong&gt;&lt;/em&gt;&amp;nbsp; I'm sure there's some balloon that says "To minimize waste", or "To load balance across multiple hard drives is a good thing!" But this is &lt;strong&gt;wrong&lt;/strong&gt;. But before you go and blow away all your LUNs and RAID arrays, let's examine a scenario:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s assume that we have a SAN, with 4 enclosures.&amp;nbsp; Each enclosure is capable of holding 10 hard drives, and we decide to fill it with 100GB drives each rated at 100 IOPs each.&amp;nbsp; Total possible space is 1TB and our bandwidth is 1,000 IOPS per Enclosure.&amp;nbsp;To maximize our investment (thereby minimizing waste), we follow our SAN&lt;br /&gt;vendor&amp;rsquo;s recommendation and create one big RAID 5 array and lose 1 disk to the parity calculation.&amp;nbsp; So our available space is 900GB and our bandwidth is 1,000 IOPs.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Next, we decide to deploy SharePoint 2010 via HyperV with all disks on SAN.&amp;nbsp;Our server architecture is 3 servers, 1 SQL, 1 APP and 1 WFE.&amp;nbsp; We decide our&amp;nbsp;drive needs are:&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;b&gt;Server&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="177"&gt;
&lt;p&gt;&lt;b&gt;Disk Description&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="192"&gt;
&lt;p&gt;&lt;b&gt;Requirements&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;b&gt;SQL&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="177"&gt;
&lt;p&gt;OS Drive&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="192"&gt;
&lt;p&gt;100GB and 50 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="177"&gt;
&lt;p&gt;Data Files&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="192"&gt;
&lt;p&gt;100GB and 250 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="177"&gt;
&lt;p&gt;Transaction Logs&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="192"&gt;
&lt;p&gt;100GB and 250 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;b&gt;WFE&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="177"&gt;
&lt;p&gt;OS Drive&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="192"&gt;
&lt;p&gt;100GB and 50 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;b&gt;APP&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="177"&gt;
&lt;p&gt;OS Drive&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="192"&gt;
&lt;p&gt;100GB and 50 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;We send this to the SAN admins and the SAN admin says to themselves: &amp;ldquo;Self, enclosure #1 has a 900GB capacity and 1,000 IOPs.&amp;nbsp; SharePoint 2010 needs 500GB and 650 IOPS.&amp;rdquo; And would promptly carve up the RAID 5 array of enclosure #1 into 5 different LUNs: 3 for SQL, 1 for WFE and 1 for APP.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s where the problem arises.&amp;nbsp; A hard drive only has one armature and uses it to read and write, but it can&amp;rsquo;t do both simultaneously.&amp;nbsp; If the hard drive is writing, and we request a read for some file, then the read gets queued until the disk I/O completes.&amp;nbsp; RAID is a double edged sword and the root of our problem:&amp;nbsp; when using any kind of RAID, the data is dispersed amongst all the drives.&amp;nbsp; On one hand, RAID is a huge performance boost because if we have 20 bits to write and 10 disks to use, then each disk only has to write 2 bits.&amp;nbsp; On the other hand, if we have 20 bits to write, and 10 bits to read, the reading bits will have to wait because all the drives are used for the writes.&amp;nbsp; Now granted, this read and write happens EXTREMELY fast, but the pause is still present and when we're talking about operations per second, they add up quickly.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now, accordingly to SQL best practices, we split our Data file and Transaction logs to different disks to alleviate this queuing.&amp;nbsp; The transaction logs are very write heavy (1000 writes: 1 read or more).&amp;nbsp; The Data file is very ready heavy (1 write: 500 reads or so).&amp;nbsp; As far as SQL in concerned, they&amp;rsquo;re on separate disks because we put them on separate LUNs.&amp;nbsp; BUT WAIT: remember that all the LUNS are on one RAID array, AND that when you read or write from a RAID array you utilize all the disks.&amp;nbsp; Thus you haven&amp;rsquo;t actually split your data files and transaction logs &amp;ndash; &lt;strong&gt;&lt;i&gt;they&amp;rsquo;re on the same disks&lt;/i&gt;&lt;/strong&gt;.&amp;nbsp; Now stack on top of that the write heavy statistics of your APP server, and the read heavy load of your WFE, and our throughput plummets.&amp;nbsp; While still under our bandwidth of 1,000 IOPS for the enclosure, the SQL LUN can't write while the WFE LUN is reading and vice versa.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So we&amp;rsquo;ve identified the underlying problem.&amp;nbsp; What&amp;rsquo;s the solution?&amp;nbsp; Let&amp;rsquo;s revisit our server needs:&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;b&gt;Server&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="177"&gt;
&lt;p&gt;&lt;b&gt;Disk Description&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="192"&gt;
&lt;p&gt;&lt;b&gt;Requirements&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;b&gt;SQL&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="177"&gt;
&lt;p&gt;OS Drive&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="192"&gt;
&lt;p&gt;100GB and 50 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="177"&gt;
&lt;p&gt;Data Files&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="192"&gt;
&lt;p&gt;100GB and 250 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="177"&gt;
&lt;p&gt;Transaction Logs&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="192"&gt;
&lt;p&gt;100GB and 250 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;b&gt;WFE&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="177"&gt;
&lt;p&gt;OS Drive&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="192"&gt;
&lt;p&gt;100GB and 50 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;b&gt;APP&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="177"&gt;
&lt;p&gt;OS Drive&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="192"&gt;
&lt;p&gt;100GB and 50 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;RAID 5 is a minimum of 3 drives: 2 data drives and a parity drive.&amp;nbsp; SQL best practices is to break up the OS, Data and Transaction logs onto separate drives.&amp;nbsp; &amp;nbsp;How do we follow best practices and leverage the SAN?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;One possible solution would be to breakup into 3 RAID5 volumes like so (note our wasted space is now 300GB instead of 100GB):&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="119"&gt;
&lt;p&gt;&lt;b&gt;RAID 5 volume&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="162"&gt;
&lt;p&gt;&lt;b&gt;Disks&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="222"&gt;
&lt;p&gt;&lt;b&gt;Available space and bandwidth&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="119"&gt;
&lt;p&gt;&lt;b&gt;#1&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="162"&gt;
&lt;p&gt;1-4&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="222"&gt;
&lt;p&gt;300GB and 4,000 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="119"&gt;
&lt;p&gt;&lt;b&gt;#2&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="162"&gt;
&lt;p&gt;5-7&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="222"&gt;
&lt;p&gt;200GB and 3,000 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="119"&gt;
&lt;p&gt;&lt;b&gt;#3&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="162"&gt;
&lt;p&gt;8-10&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="222"&gt;
&lt;p&gt;200GB and 3,000 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="119"&gt;
&lt;p&gt;&lt;b&gt;Total&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="162"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="222"&gt;
&lt;p&gt;700GB and 10,000 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;b&gt;SQL&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="183"&gt;
&lt;p&gt;OS Drive&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="186"&gt;
&lt;p&gt;100GB and 50 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="204"&gt;
&lt;p&gt;100GB from RAID5 volume #1&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="183"&gt;
&lt;p&gt;Data Files&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="186"&gt;
&lt;p&gt;100GB and 250 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="204"&gt;
&lt;p&gt;200GB from RAID5 volume #2&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="183"&gt;
&lt;p&gt;Transaction Logs&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="186"&gt;
&lt;p&gt;100GB and 250 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="204"&gt;
&lt;p&gt;200GB from RAID5 volume #3&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;b&gt;WFE&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="183"&gt;
&lt;p&gt;OS Drive&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="186"&gt;
&lt;p&gt;100GB and 50 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="204"&gt;
&lt;p&gt;100GB from RAID5 volume #1&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="104"&gt;
&lt;p&gt;&lt;b&gt;APP&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="183"&gt;
&lt;p&gt;OS Drive&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="186"&gt;
&lt;p&gt;100GB and 50 IOPs&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="204"&gt;
&lt;p&gt;100GB from RAID5 volume #1&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In the proposed solution, we are sacrificing 200GB of disks, but we&amp;rsquo;re gaining the additional performance of splitting our data files and transactions logs, and SQL is capable of leveraging the entire 3000 IOPS for each LUN.&amp;nbsp; The OS disks are still sharing a RAID array (just like in the rejected solution) so we&amp;rsquo;re not making the problem any worse, but since we moved the data and transaction to dedicated spindles, we gain performance by reducing the overall load.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Lastly, I&amp;rsquo;ve fudged the numbers a little bit to make my point.&amp;nbsp; I&amp;rsquo;m not sure if 50 IOPs is too little or too much for an OS drive.&amp;nbsp; I don&amp;rsquo;t know if your enclosure has 10 100GB drives with 100 IOPS in RAID5 or 25 300GB drives with 10,000 IOPS in RAID10.&amp;nbsp; And the read/write challenges is nothing new hard drive manufactures nor SAN vendors &amp;ndash; great strides have been taken to reduce the performance of a read and write request coming in simultaneously; namely cache.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;But here&amp;rsquo;s the facts:&amp;nbsp; if we plan ahead of time for these scenarios and work with the SAN admins, we can increase the SAN&amp;rsquo;s overall efficiency.&amp;nbsp; By knowing the loads of other servers on the RAID array, we can intelligently place our loads and prevent any cross server thrashing of the disks.&amp;nbsp; Sometimes the answer may be one big&lt;br /&gt;RAID 10 array, or three smaller RAID 5 array.&amp;nbsp; &amp;nbsp;Proper benchmarking is the key and should be the first step in any new server installation to insure we can identify any issues as soon as possible.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;HTH&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3448663" width="1" height="1"&gt;</content><author><name>BigTallCampbell</name><uri>http://blogs.technet.com/bigtallcampbell_4000_gmail.com/ProfileUrlRedirect.ashx</uri></author><category term="SAN" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/SAN/" /><category term="SQL" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/SQL/" /><category term="RAID" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/RAID/" /><category term="Disk Sharing" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/Disk+Sharing/" /><category term="Disk" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/Disk/" /><category term="SharePoint 2010" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/SharePoint+2010/" /><category term="Virtualization" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/Virtualization/" /></entry><entry><title>First Blog Post</title><link rel="alternate" type="text/html" href="http://blogs.technet.com/b/rycampbe/archive/2011/08/23/first-blog-post.aspx" /><id>http://blogs.technet.com/b/rycampbe/archive/2011/08/23/first-blog-post.aspx</id><published>2011-08-23T15:30:33Z</published><updated>2011-08-23T15:30:33Z</updated><content type="html">&lt;p&gt;&lt;span style="font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;Well, this is my first blog post.&amp;nbsp; This blog is designed to consolidate my ramblings and thoughts into a concise and available format, trying to give back to the community.&amp;nbsp; For several years I've been working with SharePoint and have relied heavily on the community to get me through some tough situations.&amp;nbsp; As I've progressed through the challenges, I've realized that there are several lessons to be learned Brady Bunch style.&amp;nbsp; I've reached a point where I'm ready for feedback to grow and progress in my SharePoint repoitoire.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;So stay tuned - this is going to be fun.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3448655" width="1" height="1"&gt;</content><author><name>BigTallCampbell</name><uri>http://blogs.technet.com/bigtallcampbell_4000_gmail.com/ProfileUrlRedirect.ashx</uri></author><category term="Post" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/Post/" /><category term="First" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/First/" /><category term="Blog" scheme="http://blogs.technet.com/b/rycampbe/archive/tags/Blog/" /></entry></feed>