Recently, we found ourselves in a situation where we suspected that the customer had exceeded our capacity planning guidelines for the number of items in a document library; however, how do we go about verifying that? Well, the steps below will walk you through how to enumerate the counts for the different folders. You have the ability to set a threshold value and report on everything that exceeds that threshold.
Enjoy!
1: create table ##Largelists 2: ( 3: [listID] uniqueidentifier NULL, 4: [siteID] uniqueidentifier null, 5: [webid] uniqueidentifier null, 6: [counts] bigint NULL, 7: [fullurl] nvarchar(255) NULL, 8: [dirname] nvarchar(255) null, 9: [tp_title] nvarchar(255) NULL, 10: [servername] nvarchar(100) null, 11: [content_DB] nvarchar(100) null 12: ) 13: 14: go 15: CREATE TABLE #DBNamesLL 16: ( 17: DatabaseName VARCHAR(800), 18: RecStatus INT Default 0 19: ) 20: 21: DECLARE @cmdStr NVARCHAR(2000) 22: DECLARE @dbName VARCHAR(500) 23: INSERT INTO #DBNamesll (DatabaseName) 24: SELECT 25: [Name] 26: FROM 27: sys.databases 28: WHERE 29: state_desc = 'online' 30: ORDER BY 31: [Name] ASC 32: 33: WHILE EXISTS 34: (SELECT 35: * 36: FROM 37: #DBNamesLL 38: WHERE 39: RecStatus=0 40: ) 41: 42: BEGIN 43: SELECT TOP 1 44: @DbName = DatabaseName 45: FROM 46: #DBNamesLL 47: WHERE 48: RecStatus = 0 49: 50: SELECT @cmdStr = N'USE ' + quotename(@dbName, '[') + N';' 51: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES with (NOLOCK) WHERE TABLE_NAME = ''namevaluepair'')' 52: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'BEGIN' 53: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'INSERT INTO ##largelists' 54: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'select a.siteid, a.webid, a.listid, count(a.id) [counts], c.fullurl, a.dirname, b.tp_title,' 55: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + '(@@servername) [servername], (select db_name(dbid) from master..sysprocesses with (NOLOCK) where spid=@@SPID) [Content_DB]' 56: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'from alldocs as a with (nolock) inner join' 57: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'alllists as b with (nolock) on a.listid=b.tp_id inner join' 58: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'webs as c with (nolock) on b.tp_webid=c.id' 59: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'group by a.listid, c.fullurl, b.tp_title, a.siteid, a.webid, a.dirname' 60: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'HAVING count(a.id) > ''1500''' 61: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'END' 62: EXEC sp_executesql @Cmdstr 63: 64: UPDATE 65: #DBNamesLL 66: SET 67: RecStatus = 1 68: WHERE 69: RecStatus = 0 AND 70: DatabaseName = @DbName 71: END 72: 73: SELECT 74: WebID, 75: SiteID, 76: ListID, 77: tp_Title, 78: DirName, 79: Counts, 80: content_DB, 81: servername 82: FROM 83: ##largelists 84: ORDER BY 85: counts DESC 86: 87: DROP TABLE #DBNamesLL 88: DROP TABLE ##largelists
1: create table ##Largelists
2: (
3: [listID] uniqueidentifier NULL,
4: [siteID] uniqueidentifier null,
5: [webid] uniqueidentifier null,
6: [counts] bigint NULL,
7: [fullurl] nvarchar(255) NULL,
8: [dirname] nvarchar(255) null,
9: [tp_title] nvarchar(255) NULL,
10: [servername] nvarchar(100) null,
11: [content_DB] nvarchar(100) null
12: )
13:
14: go
15: CREATE TABLE #DBNamesLL
16: (
17: DatabaseName VARCHAR(800),
18: RecStatus INT Default 0
19: )
20:
21: DECLARE @cmdStr NVARCHAR(2000)
22: DECLARE @dbName VARCHAR(500)
23: INSERT INTO #DBNamesll (DatabaseName)
24: SELECT
25: [Name]
26: FROM
27: sys.databases
28: WHERE
29: state_desc = 'online'
30: ORDER BY
31: [Name] ASC
32:
33: WHILE EXISTS
34: (SELECT
35: *
36: FROM
37: #DBNamesLL
38: WHERE
39: RecStatus=0
40: )
41:
42: BEGIN
43: SELECT TOP 1
44: @DbName = DatabaseName
45: FROM
46: #DBNamesLL
47: WHERE
48: RecStatus = 0
49:
50: SELECT @cmdStr = N'USE ' + quotename(@dbName, '[') + N';'
51: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES with (NOLOCK) WHERE TABLE_NAME = ''namevaluepair'')'
52: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'BEGIN'
53: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'INSERT INTO ##largelists'
54: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'select a.siteid, a.webid, a.listid, count(a.id) [counts], c.fullurl, a.dirname, b.tp_title,'
55: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + '(@@servername) [servername], (select db_name(dbid) from master..sysprocesses with (NOLOCK) where spid=@@SPID) [Content_DB]'
56: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'from alldocs as a with (nolock) inner join'
57: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'alllists as b with (nolock) on a.listid=b.tp_id inner join'
58: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'webs as c with (nolock) on b.tp_webid=c.id'
59: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'group by a.listid, c.fullurl, b.tp_title, a.siteid, a.webid, a.dirname'
60: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'HAVING count(a.id) > ''1500'''
61: SELECT @cmdStr = @cmdStr + CHAR(13)+CHAR(10) + 'END'
62: EXEC sp_executesql @Cmdstr
63:
64: UPDATE
65: #DBNamesLL
66: SET
67: RecStatus = 1
68: WHERE
69: RecStatus = 0 AND
70: DatabaseName = @DbName
71: END
72:
73: SELECT
74: WebID,
75: SiteID,
76: ListID,
77: tp_Title,
78: DirName,
79: Counts,
80: content_DB,
81: servername
82: FROM
83: ##largelists
84: ORDER BY
85: counts DESC
86:
87: DROP TABLE #DBNamesLL
88: DROP TABLE ##largelists
This indicates that I have 831 list items in the HelpFold/MetaData/1033/MS_OSS folder. It has an associated WebID, SiteID, and ListID shown. There is additional information to the right that identifies the server and the content database where the list is located.