For organizations using Microsoft Outlook and Exchange server with users complaining that Outlook is REALLY slow and sluggish, and there are performance issues with Outlook 2003, Outlook 2007, even Outlook 2010, there are known problems and known fixes to the performance problems. I've been meaning to write this blog post for years, never found the time, but after getting FIVE calls in the past 48-hours for companies (large and small) having a LOT of users complaining about Outlook performance issues, I finally broke down and wrote this guide.
This is not a guide based on opinions, theories, or mere observations, but I took the time to actually grab Microsoft TechNet articles and other authoritative documents to back the information I'm providing as I find there's a lot of "opinions" out on the Web, lots of incorrect information, or stuff that you just can't take to management and say that some unknown guy said the problem is X, and the solution is Y. In addition to authoritative reference materials, I'm also going to explain (hopefully in clear English) why the problem exists as well as common steps to FIX the performance issues. And if that's still not good enough, I have an FAQ section at the bottom to address anything I didn't address in the main body of this post.
Here you go…
If you're running Exchange 2003 still and your Exchange server is pretty maxed out (old servers, old hard drives, you've added a lot of users to Exchange since the server was originally implemented, etc), then Exchange 2003 is commonly a place to start for consideration to improve user experience and performance. Exchange 2003 was a 32-bit environment that only supported a maximum of 4gb of RAM in the server, was not extremely efficient in how it read/wrote messages to disk, and as email demands have grown (users sending large attachments, mobile phones slamming the server on top of desktop users hitting the server, users keeping lots of email, etc), Exchange 2003 was just not built to support the current world of email. Exchange 2007 and Exchange 2010 are 64-bit environments, adding more memory provides a LOT more buffer space for the management of messages, and with Exchange 2010 a shift from a random read/write Exchange database to one that defrags and writes messages sequentially makes the latest Exchange servers significantly more efficient (5-10 times or more efficient) than Exchange 2003. More benefits of Exchange 2007 up on: http://msexchangeteam.com/archive/2006/09/08/428860.aspx, and workshops I've done on improvements in Exchange 2010 up on http://www.cco.com/online.htm (sorry, I said I'd focus on fact, not opinions, the rest of the bullets in this post gets more factual, but I had to start with recommending orgs to get off Exchange 2003 because the rest of what I note will have more impact if the backend is on Exchange 2007 or preferably Exchange 2010)
Outlook 2003 / 2007 Limitations of Mailbox Size
Original releases of Outlook 2003 and Outlook 2007 have limitations on mailbox size (which is 2gb), although Outlook users can continue to grow their mailbox as large as they want, Outlook starts to slow down when the user's mailbox exceeds 2gb. See Microsoft KB Article http://support.microsoft.com/kb/932086/en-us As this article notes, "Microsoft Office Outlook 2007 momentarily stops responding during typical operations. This includes when you read e-mail messages, move e-mail messages, or delete e-mail messages." Microsoft did release an update to Outlook 2007 (http://support.microsoft.com/kb/933493/) so you can theoretically extend your mailbox up to 75gb (and Outlook 2010 also supports this out of the box 75gb capability), however the larger the mailbox (beyong 2gb, even with an update Outlook 2007 or Outlook 2010), the slower the performance you will experience. See the next note on "Too Many Messages in a Folder" for more information.
Technical Background: The 2gb limit is a 32-bit filesystem limitation, the operating system cannot handle contiguous files greater than 2gb as a single file, it has to break the file up into smaller blocks to manage the file. So despite the Outlook 2007 or 2010 support for greater than 2gb OST file (which is where Cachemode Outlook stores the offline data), maintaining a mailbox with less than 2gb of storage will optimize the filesystem access to Outlook (ie: will allow Outlook to run more efficiently, and thus not as "sluggish" or "slow")
Solution: For users that need more than 2gb of storage, implement an archiving solution (like Symantec Enterprise Vault, Iron Mountain NearPoint for Exchange, etc) or even Exchange 2010 Archiving that is built into Exchange 2010 to keep the user's primary mailbox under 2gb, and allow the archive to hold the user's excess mail.
Too Many Messages in a Folder
Users with more than 10,000 mail messages in any single folder will tend to complain that Outlook is "slow", and I've seen mailboxes where users have 80,000-100,000 mail messages in their Inbox. This is a HUGE problem with Outlook/Exchange, especially for any of the default folders like Inbox, Sent Mail, and Calendar. Microsoft has a KB article that addresses this: http://support.microsoft.com/kb/905803 Specifically in the article, it states "We recommend that you maintain a range of 3,500 to 5,000 items in a folder depending on the capacity of the Exchange Server environment. Additionally, you can create more top-level folders or create sub-folders underneath the Inbox and Sent Items folders. When you do this, the costs that are associated with index creation will be greatly reduced if the number of items in any one folder does not exceed 5,000." (Updated 7/29/2010 - Thanks to a comment from Michael Lundgren, this update KB article notes that Exchange 2010 recommended max messages in a folder is 100,000 http://technet.microsoft.com/en-us/library/ee832791.aspx. Point to note, Exchange 2010 has NOT changed the number of indexed views (still only 11 views) so the notation in that KB article of 100,000 is relative to running in "cache mode" Outlook 2010. If you are using Outlook 2003 not in cache mode against Exchange 2010, the recommended maximum is still back to the 5,000 level)
Technical Background: There are a standard list of "default views" that each Outlook mailbox caches the view for quick access by users, views such as the default Inbox view, Sent Mail view, Calendar view, Contacts view, Inbox view sorted by Sender name, Inbox view sorted by Date, Inbox view sorted by Subject, etc. When a user opens their mailbox, the cache queues up the default content views. Whenever a user clicks to re-sort a view (ie: user wants to sort messages in their Inbox by date, and then sort messages in their Inbox by sender name), Outlook re-casts the view. When the Inbox has more than about 10,000 messages, the cache buffer in Outlook is exceeded, so Outlook then has to grab all of the message headers (date, sender, subject info) and re-sorts the information in memory real time), this causes a significant delay in how long it takes for a user to open their Outlook or access a folder. If the user is using Cachemode for Outlook, the data access and sort is done locally. However, if the user is not using Cachmode, then the access or sort is done between Outlook and the Exchange server, meaning that ALL headers for ALL messages in the folder need to be retrieved from Exchange to Outlook before the sort can occur. This puts a huge load on the local Outlook to slowly gather info from Exchange to do the sort, and a huge load on Exchange to query the entire Exchange database to gather all of the messages in the folder to send the message headers to the user. This holds true for ANY folder, so if a user has thousands of calendar entries going back years, or thousands of Sent Items when they click on the Sent Item folder, or thousands of items in some custom folder the user creates, once the Outlook view buffer is exceeded, each and every time the user clicks on a folder, a query has to be done to manually sort and display the messages on screen.
Solution: Keep all folders under 5,000 messages. Create subfolders and move messages out of the Inbox, Sent Mail, and Calendar folders at a minimum into other folders, but better yet, use an email archiving solution to minimize the amount of messages stored in Outlook. Remember, it's not just Inbox / Sent Mail folders, but calendars, which periodically archiving old calendar appointments is just as important as archiving and cleanring up mail message folders. Another option is consider upgrading to Exchange 2010 and use Outlook 2010 in cache mode to increase the potential limit up to 100,000 messages in the folder, however the optimal limits are still well under 20,000 messages in a folder as the performance impact of stressing Exchange to index on the fly beyond the default 11 indexes puts excessive strain on Exchange.
Anti-Virus Programs on Performance
Anti-virus programs put a load on Outlook, especially if realtime message scanning (which is usually on by default) is enabled. That means every time a message is opened, the anti-virus software scans the message and the attachment. This can take 5-20 seconds dependent on the speed of the computer system and the load the system has with other applications on how quickly a real time scan is performed. There have also been bugs in anti-virus programs such as one by McFee with Outlook 2007 referenced on the McAfee Website: https://kc.mcafee.com/corporate/index?page=content&id=KB50523 Per the tech note, there is a "Known problem with Outlook 2007 and McAfee that identifies a buffer overflow in Outlook's 'auto-complete' function and 'hangs' Outlook for 5-10 seconds as McAfee works out the issue with Outlook"
Solution: A best practice with Exchange 2007 and Exchange 2010 is to do anti-malware scanning on the Exchange Hub Transport servers. Since Exchange 2007 and 2010 have ALL inbound and outbound messages as well as user to user messages go through a Hub Transport server, simply having the HT server scan the messages in transit ensures that malware is not transferred from user to user. With messages scanned in transit, an organization can choose to disable real time scanning of messages at the Outlook client, thus eliminating the 5-20 second delay (and scanning performance load) caused by the anti-malware product on the opening of each and every message at the client desktop. Messages at the client or on the Exchange server store can be scanned periodically (ie: during idle cycles or off hours to ensure files "at rest" are clean). This will improve performance on the client side.
Apple iOS 4 Bug
Apple has acknowledged (June/2010) there was a bug in the initial release of their iOS 4.0 operating system that shipped with all of its iPhone 4 devices and for any user who upgraded their iPhone to the iOS 4 operating system. The Apple technote explains: http://support.apple.com/kb/TS3398 Specifically from the tech note "Immediately after updating to iOS 4.0, some users may notice that Exchange ActiveSync Mail, Contacts, or Calendars do not sync, or sync very slowly. In addition, some Exchange Server administrators may notice their servers running slowly."
Technical Background: Effectively what this bug did was create an I/O error between iPhones and Exchange, one that has caused Exchange servers running ActiveSync (basically any Exchange 2003, 2007, or 2010 server) to effectively get stuck trying to connect to the iPhone with iOS 4. While getting stuck communicating with an unpatched iPhone, the Exchange server cannot service other ActiveSync requests, and thus the experience has been Windows Mobile and iPhone 3 users complaining that Exchange mobile access is not available, users cannot connect to sync their mobile phones, or sluggishness for all other users accessing the Exchange frontend or Client Access servers.
Solution: Anyone with the original release of iPhone iOS 4.0 needs to update their iOS with the patch/update noted in the Apple support note.
Outlook added indexing in Outlook 2007 which is a GREAT function that allows you to look-up messages throughout the mailbox very quickly. The problem with indexing is that it takes a while for the index to be created, and any major change in a user's mailbox (ie: users moves a LOT of messages from one folder to another) requires re-indexing. While the system is reindexing Outlook, the performance of Outlook and the entire user's system is impacted.