Bottlenecks can occur in a number of areas: memory, disk I/O, CPU and Network I/O. Memory (or RAM) is the main bottleneck when using SpamAssassin. Using SpamAssassin as a daemon improves performance.
Filtering out messages before SpamAssassin processes them reduces the load on the machine. This can be achieved in a number of ways.
SpamAssassin can run on separate machines and be accessed from the MTA. SQL can help to keep user settings in a single location even when multiple machines are in use. SQL is also used to increase performance.