{"id":10581,"date":"2006-06-23T10:10:00","date_gmt":"2006-06-23T10:10:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/bharry\/2006\/06\/23\/june-devdev-tfs-statistics\/"},"modified":"2018-08-14T00:35:03","modified_gmt":"2018-08-14T00:35:03","slug":"june-devdev-tfs-statistics","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/bharry\/june-devdev-tfs-statistics\/","title":{"rendered":"June DevDev TFS statistics"},"content":{"rendered":"<p>The biggest area of growth in the last month is in work item tracking activity.&nbsp; The reason is that we hooked up a mirror between our &#8220;old&#8221; work item tracking system and TFS.&nbsp; This means that changes in each system is being replicated into the other.&nbsp; This has added some additional load to the server (although the increment is fairly minor in terms of available server capacity).<\/p>\n<p>In addition to the additional WIT load, we continue to add source branches for more teams as we bring them on &#8211; that accounts for most of the file growth (about 6,000,000 files).<\/p>\n<p>The big learning (for me) in the past month or two has been around SAN configuration and performance.&nbsp; A month or so ago we started getting event log errors on our SQL Server during peak load times saying that some I\/O operations were taking more than 15 seconds to complete.&nbsp; This has been coincident with us seeing some performance degradation for end users during these peak times.<\/p>\n<p>We initially suspected the SAN and ultimately concluded that the SAN is significantly underpowered and that there are some software improvements we can make.<\/p>\n<p>What I learned about our SAN is that it is RAID5 with 16 spindles.&nbsp; There are 2 problems here:<\/p>\n<ul>\n<li>Our application is fairly write&nbsp;intensive and RAID5 is a very poor choice for applications that do a lot of writing.&nbsp; Some would say it is a bad choice for all database applications.&nbsp; In investigating this I was directed (by someone on the SQLServer team) to an interesting site: <a href=\"http:\/\/www.baarf.com\/\">http:\/\/www.baarf.com<\/a>.&nbsp; We are currently in the process of planning a migration to a RAID10 SAN configuration.<\/li>\n<li>16 spindles is not enough for the number of people we have on this server.&nbsp; A single spindle can handle 100-150 I\/Os per second.&nbsp; This means our 16 spindles can handle 1600 &#8211; 2400 I\/Os per second.&nbsp; We are seeing I\/O peaking at about 3900 I\/O requests per second.&nbsp; This means we need about twice as many spindles.&nbsp; Although switching from RAID5 to RAID10 will significantly reduce the number of I\/Os per second (because a write is only 2 I\/Os for RAID10 but 4 I\/Os for RAID5).<\/li>\n<\/ul>\n<p>We also learned some stuff looking at the source of the I\/Os.&nbsp; We tracked back I\/Os to the top sprocs generating them and some were obvious &#8211; prc_Get and prc_Checkin.&nbsp; However, some were surprising (prc_iFindPendingChange &#8211; was an example, I think).&nbsp; After investigation we found 3 indexes that could be tuned that would reduce the numbers of I\/Os we generate for the same operations.&nbsp; We&#8217;re continuing to investigate and I expect we&#8217;ll find further improvements that will reduce the I\/O we do per operation.&nbsp; As always, we&#8217;ll roll these changes into our next service pack so everyone can benefit from them.<\/p>\n<p>And here are the latest statistics&#8230;<\/p>\n<p><strong>Users<br \/><\/strong>Recent users: 680<br \/>Users with assigned work items: 1,662<br \/>Version control users: 1,312<\/p>\n<p><strong>Work items<\/strong><br \/>Work items: 105,2770<br \/>Areas &amp; Iterations: 6,059<br \/>Work item versions: 770,438<br \/>Attached files: 28,582<br \/>Queries: 9,954<\/p>\n<p><strong>Version control<br \/><\/strong>Files\/Folders: 19,580,651\/2,570,303<br \/>LocalVersion: 110.9M<br \/>Total compressed file sizes: 193.3G<br \/>Workspaces: 2,702<br \/>Shelvesets: 4,098<br \/>Checkins: 81,292<br \/>Pending changes: 397,954<\/p>\n<p><strong>Requests&nbsp;(last 7 days)<br \/><\/strong>Work Item queries: 250,592<br \/>Work Item updates: 36,793<br \/>Work Item opens: 157,748<br \/>Gets: 14,033<br \/>Downloads: 4.3M<br \/>Checkins: 3,719<br \/>Uploads: 10,852<br \/>Shelves: 450<\/p>\n<p>As always comments and questions are welcome (&#8230;even encouraged)&nbsp; You can even tell me if I&#8217;m boring you to death \ud83d\ude42<\/p>\n<p>Brian<\/p>\n<p><a href=\"https:\/\/msdnshared.blob.core.windows.net\/media\/MSDNBlogsFS\/prod.evol.blogs.msdn.com\/CommunityServer.Components.PostAttachments\/00\/00\/64\/43\/14\/Growth.JPG\">Growth.JPG<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The biggest area of growth in the last month is in work item tracking activity.&nbsp; The reason is that we hooked up a mirror between our &#8220;old&#8221; work item tracking system and TFS.&nbsp; This means that changes in each system is being replicated into the other.&nbsp; This has added some additional load to the server [&hellip;]<\/p>\n","protected":false},"author":244,"featured_media":14617,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[3],"class_list":["post-10581","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-tfs-dogfood-statistics"],"acf":[],"blog_post_summary":"<p>The biggest area of growth in the last month is in work item tracking activity.&nbsp; The reason is that we hooked up a mirror between our &#8220;old&#8221; work item tracking system and TFS.&nbsp; This means that changes in each system is being replicated into the other.&nbsp; This has added some additional load to the server [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/posts\/10581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/users\/244"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/comments?post=10581"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/posts\/10581\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/media\/14617"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/media?parent=10581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/categories?post=10581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/tags?post=10581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}