Friday, 30 November 2007

Limitations of SharePoint 2007

I've had several people ask me what the limitations of SharePoint 2007 are. Things like the maximum document upload size, maximum number of items per folder per document library and the maximum number of subsites per site collection. These figures must be taken into consideration when designing the SharePoint architrecture:

Site objectGuidelines for acceptable performanceNotesScope of impact when performance degrades
Site collection50,000 per Web applicationTotal farm throughput degrades as the number of site collections increases. Farm

Web site

250,000 per site collection

You can create a very large total number of Web sites by nesting the subsites. For example, 100 sites, each with 1000 subsites, is 100,000 Web sites. The maximum recommended number of sites and subsites is 125 sites with 2,000 subsites each, for a total of 250,000 sites.

Site collection


2,000 per Web site

The interface for enumerating subsites of a given Web site does not perform well as the number of subsites surpasses 2,000.

Site view


5 million per library

You can create very large document libraries by nesting folders, using standard views and site hierarchy. This value may vary depending on how documents and folders are organized, and by the type and size of documents stored.



2,000 per view

Testing indicates a reduction in performance beyond two thousand items. Using indexing on a flat folder view can improve performance.

List view

Document file size

50MB (2GB max*)

File save performance is proportional to the size of the file. The default maximum is 50 MB. This maximum is enforced by the system, but you can change it to any value up to 2 GB.

Library, file save performance


2,000 per Web site

Testing indicates a reduction in list view performance beyond two thousand entries.

List view

Field type

256 per list

This is not a hard limit, but you might experience list view performance degradation as the number of field types in a list increases.

List view


2,000 per document library
4,096 per list

This is not a hard limit, but you might experience library and list view performance degradation as the number of columns in a document library or list increases.

Library and list view

Web Part

50 per page

This figure is an estimate based on simple Web Parts. The complexity of the Web Parts dictates how many Web Parts can be used on a page before performance is affected.


Thursday, 29 November 2007

Accessibility Kit for SharePoint® (AKS)

Accessibility Kit for SharePoint® (AKS) is out now. Go to and download it.

"The AKS will deliver a kit that can significantly reduce the time, knowledge, and effort required to implement a SharePoint-based Web site that conforms to the World Wide Web Consortium’s (W3C) Web Content Accessibility Guidelines 1.0 Priority 1 and 2 checkpoints, which are collectively known as WCAG 1.0 AA. The AKS can also be used to address the exceptions that have been identified in the U.S. government’s Section 508 of the Rehabilitation Act’s Voluntary Product Accessibility Template or VPAT documents for MOSS 2007. "

I will let you know if it delivers what they promise.....

Monday, 5 November 2007

Monitoring Application Pools and Restarting them


I was trying to find an application that would monitor the state of application pool on an IIS server but didn't have any luck. Instead I decided to write a simple .net page that would loop through all the app pools and if it's down, it would restart it and email me to say it's down. I will extent this to actually monitor SharePoint sites and see if they are down and if so, to also notify me.

Here's the code:

Partial Class _Default
Inherits System.Web.UI.Page
Dim LogDir = "C:\AppPoolLog"
Dim ToAddress = ""
Dim FromAddress = ""

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
showAppPools() 'Runs showAppPools Sub
End Sub

Sub showAppPools()
Dim obj, apool
obj = GetObject("IIS://localhost/W3SVC/apppools")
For Each apool In obj
obj = Nothing
End Sub

' This will get the status of the app pool
Sub apppoolStatus(ByVal apppool)
Dim obj
obj = GetObject("IIS://localhost/W3SVC/apppools/" & apppool)
Select Case obj.apppoolstate
Case 0
writetoLog(apppool, "0") 'Do not know what this status is
Case 1
writetoLog(apppool, "1") 'Do not know what this status is
Case 2
writetoLog(apppool, "Up")
Case 3
writetoLog(apppool, "3") 'Do not know what this status is
Case 4
writetoLog(apppool, "DOWN")
writetoLog(apppool, "Restarted")
End Select
obj = Nothing
End Sub

' This will write information to a log file
Sub writetoLog(ByVal apppool, ByVal response)
Dim fso
Dim lday = DatePart("d", Now())
Dim lmonth = DatePart("m", Now())
Dim lyear = DatePart("yyyy", Now())
Dim logdate = lmonth & lday & lyear
fso = CreateObject("Scripting.FileSystemObject")
Dim objFSOwriteline = fso.OpenTextFile(LogDir & "\" & logdate & ".log", 8, True)
objFSOwriteline.WriteLine(response & "," & apppool & "," & now())
objFSOwriteline = Nothing
fso = Nothing
End Sub

' This starts the down app pool
Sub startapppool(ByVal apppool)
Dim obj
obj = GetObject("IIS://localhost/W3SVC/apppools/" & apppool)
obj = Nothing
End Sub

' This send a email regarding the down/restarted app pool
Sub emailSendCDOSYS(ByVal apppool)
Dim Mailer
Dim sch = ""
Dim cdoConfig = Server.CreateObject("CDO.Configuration")
With cdoConfig.Fields
.Item(sch & "sendusing") = 2 ' cdoSendUsingPort
.Item(sch & "smtpserver") = ""
End With
Mailer = CreateObject("CDO.Message")
Mailer.Configuration = cdoConfig
Dim Message = "===============================================" & vbCrLf
Message = Message & "Application Pool: " & apppool & " has been restarted" & VbCrLf
Message = Message & "Date/Time: " & now() & "" & VbCrLf
Message = Message & "===============================================" & VbCrLf
Dim Subject = "Application Pool: " & apppool & " has been restarted"
Mailer.TextBody = Message
Mailer.Subject = Subject
Mailer.To = ToAddress
Mailer.From = FromAddress
Mailer = Nothing
End Sub

End Class


Once I modify it to monitor SharePoint sites, I will upload the code.