我在带有 LSI 控制器的 8 磁盘 raid 阵列上的 Linux 2.6.33.7 内核上运行 PostgreSQL 8.4.5 服务器。
大多数表的大小约为 1GB 或者更小。
我知道 XFS 使用分配组 (AG) 来实现 I/O 并行。
我的第一个问题是,这是否意味着如果两个表位于同一个 AG 中,则如果正在读取/写入其中一个表,则所有 I/O 请求都会排队到它们两个中?
如果是这样,我想我会希望将我的表分散到尽可能多的分配组中,对吗?这是否不能确保查询不同表的多个用户获得最佳性能?
答案1
分区大小是多少(以 GB 为单位)?我通常将其除以 4 来确定 XFS 分配组的数量。我遇到过这样的情况:我只有一个分配组,修复时出现问题,错误表明在文件修复过程中没有其他 AG 可以参考。无论哪种情况,我认为一般规则是分区大小/4。在对多个分配组运行 I/O 时,存在一定程度的并行性。但我假设该数字的回报递减,因此分区大小/2 和分区大小/4 之间的任何值都是合理的。
因此,对于 /dev/sdb1 上名为“partitionname”的 200GB 分区,我可能会使用以下 mkfs.xfs 命令序列。
mkfs.xfs -f -L /partitionname -d agcount=50 -l size=128m,version=2 /dev/sdb1
另请参阅:http://en.wikipedia.org/wiki/XFS#Allocation_groups
和 http://everything2.com/index.pl?node_id=1479435其中指出:
At least one allocation group is needed per 4 gigs of space...