有一个django“web应用程序”(从地狱),我们正在一个专用的服务器上托pipe。 在做了一些基准testing之后,我发现“应用程序”在数据库操作上是非常糟糕的(重构目前不是一种select)。 它会产生不合要求的读写活动。 现在我们正在获得另一个(第二个)专用服务器,以提高性能和一些紧急冗余。 这两台机器运行24核(英特尔(R)至强?CPU E5645 @ 2.40GHz)和48GB的RAM(也有Raid 10,6x150gb 15k硬盘)。
我想知道如何改善设置。
(在此期间我们正在重写应用程序的正确方法,但是获得当前的蹩脚的 – 运行速度更快是至关重要的,我们需要它至less在未来3个月内持续增长的stream量…)
你能提供一些关于加强安装的build议吗? 着重于为可笑的低效应用程序准备数据库机器结构。
一些基本的操作系统级数据库性能提示:
有更多的RAM比你知道如何处理。
如果您可以将整个查询放在RAM中,或者至less将数据保存在数据库或操作系统caching中,那么您的性能将大大提高。
把钱花在快速磁盘和一个好的RAID控制器上。
RAID 10(如果可以的话)以及RAID控制器上的电池备份,以便充分利用写入caching。
调整Postgres服务器的设置
(有关链接到Postgres维基页面调整Khaled的答案)
利用只读从站
如果你正在运行Postgres 9.x,你可以有只读从服务器。 将一些读取密集型工作(如报告)卸载到从站,以便在尝试进行更新时,主数据库不会忙于此。
永远不要永远不要虚拟化生产数据库服务器
几乎从来没有 – 虚拟化数据库服务器是一个性能杀手。
对于DB特定的提示,您可能需要在dba.SE中进行检查 – 通过正确的索引和查询devise可以实现巨大的性能提升。
我总是被告知 – 尽pipe我没有经验 – 为了获得最佳的数据库速度,您应该在RAID10arrays上运行数据库守护进程(不在虚拟机中)。 据我所知,在这种情况下,RAID1 + LVM算作RAID10,并加载RAM。 虚拟机将吃进你的可用内存。
另外,我不确定在同一个物理服务器上的虚拟机前会有什么好的负载平衡(可能我完全错了)。
有几件事情可以做,以提高数据库服务器的性能。 这里有一些:
尽可能优化您的查询。
将Postgresconfiguration文件中的log_min_duration_statement设置为您认为可接受的速度的边界,然后用EXPLAIN攻击缓慢的查询,找出缓慢的原因。
调整你的postgresql服务器参数。 您可以在网上find关于如何做到这一点的资源。
适用时将服务分离到不同的机器上。
这不仅对性能有好处,而且对安全性也有好处。
在数据库表上创build所需的索引以加快查询速度。
上面(1)的EXPLAIN的结果可能会帮助你