Resolving Disk Bottlenecks

A disk that is developing a bottleneck might cause the entire system to slow. If you determine that disk resources are responsible for an overall decrease in system performance, you need to find a solution quickly. Although you might assume that installing another disk offers a quick fix, the right solution to your performance problem depends on the cause of the bottleneck.

Adding a disk is an appropriate solution if you can move files to a new disk, if you can create a stripe set, or if you are out of space. However, for disk-space problems only, you might want to compress your drive, provided that the processor has available cycle to handle the compression activity and that your disk requests are typically large. For a multiuser system, you can also implement disk quotas to restrict growth of user files.

If your disk system is too slow, consider the following alternative steps:

  • Rule out a memory shortage. When memory is scarce, the Virtual Memory Manager writes more pages to disk, resulting in increased disk activity. Because low memory is a common cause of bottlenecks, make sure that this is not the source of the problem before adding hardware. Also, make sure to set the paging file to an appropriate size as described in "Evaluating Memory and Cache Usage" in this book.

  • Defragment the disk using Disk Defragmenter. For information about using Disk Defragmenter, see Windows 2000 Help.

  • Use Diskpar.exe on the Windows   2000 Resource Kit companion CD to reduce performance loss due to misaligned disk tracks and sectors.

  • Use stripe sets to process I/O requests concurrently over multiple disks. The type you use depends on your data-integrity requirements. If your applications are read-intensive and require fault tolerance, consider a RAID 5 volume. Use mirrored volumes for fault tolerance and good I/O performance overall. If you do not require fault tolerance, implement stripe sets for fast reading and writing and improved storage capacity. When stripe sets are used, disk utilization per disk should fall due to distribution of work across the volumes and overall throughput should increase.
    When using stripe sets, make sure to use the optimal size of stripe for your workload. The stripe size should be a multiple of the size of the average request.
    If you find that there is no increased throughput when scaling to additional disks in a stripe set, you might be experiencing a bottleneck due to contention between disks for the disk adapter. You might need to add an adapter to better distribute the load.

  • Place multiple drives on separate I/O buses, particularly if a disk has an I/O-intensive workload.

  • Distribute workload among multiple drives. For example, for database applications, you might want to put transaction logs on a separate spindle from data. Notice that writing to a log file is a sequential operation and tends to be more efficient than the random operations typical of accessing data in a database.
    If you are unsure of a suitable distribution for network applications, track users and the files they work with in order to plan an efficient distribution by means of the auditing capability of the NTFS file system. This tells you which disks are getting the most usage and help you determine whether you should redistribute workloads. For more information about auditing, see Windows 2000 Server Help.
    Windows Clustering and Distributed File System provide solutions for load balancing on different drives. For more information about these technologies, see "Distributed File System" in the Microsoft ® Windows ®  2000 Server Resource Kit Distributed Systems Guide .

  • Limit your use of file compression or encryption. These features can add some overhead and you should use them sparingly if not required by your enterprise and if performance is critical.

  • When obtaining disk systems, use the most intelligent and efficient components available for your disk system, including controller, I/O bus, cabling, and the disk. Upgrade to faster-speed or wider-bandwidth components as necessary. These measures generally decrease transfer time and improve throughput. Use intelligent drivers that support interrupt moderation or interrupt avoidance to alleviate the interrupt activity for the processor due to disk I/O.