You can avoid bottlenecks by spreading data storage across multiple disks and multiple disk controllers:
Put databases with critical performance requirements on separate devices. If possible, also use separate controllers from those used by other databases. Use segments as needed for critical tables and partitions as needed for parallel queries.
Put heavily used tables on separate disks.
Put frequently joined tables on separate disks.
Use segments to place tables and indexes on their own disks.