以下是一些MongoDB推薦的常用優化設置。在生產環境下選取合適的參數值,例如預讀值和默認文件描述符數目等,會對系統性能有很大的影響。
1、關閉數據庫文件的 atime
禁止系統對文件的訪問時間更新會有效提高文件讀取的性能。這個可以通過在 /etc/fstab 文件中增加 noatime 參數來實現。例如:
/dev/xvdb /data ext4 noatime 0 0
修改完文件后重新 mount就可以:
# mount -o remount /data
2、提高默認文件描述符和進程/線程數限制
Linux默認的文件描述符數和最大進程數對于MongoDB來說一般會太低。建議把這個數值設為64000。因為MongoDB服務器對每一個數據庫文件以及每一個客戶端連接都需要用到一個文件描述符。如果這個數字太小的話在大規模并發操作情況下可能會出錯或無法響應。 你可以通過以下命令來修改這些值:
ulimit -n 64000
ulimit -u 64000
3、禁止 NUMA
在一個使用NUMA技術的多處理器Linux 系統上,你應該禁止NUMA的使用。MongoDB在NUMA環境下運行性能有時候會可能變慢,特別是在進程負載很高的情況下。
4、預讀值(readahead)設置
預讀值是文件操作系統的一個優化手段,大致就是在程序請求讀取一個頁面的時候,文件系統會同時讀取下面的幾個頁面并返回。這原因是因為很多時候IO最費時的磁盤尋道。通過預讀,系統可以提前把緊接著的數據同時返回。假設程序是在做一個連續讀的操作,那么這樣可以節省很多磁盤尋道時間。
MongoDB很多時候會做隨機訪問。對于隨機訪問,這個預讀值應該設置的較小為好.一般來說32是一個不錯的選擇。
你可以使用下述命令來顯示當前系統的預讀值:
sudo blockdev –report

sudo blockdev –setra 32 /dev/xvdb

5、使用NTP時間服務器
在使用MongoDB復制集或者分片集群的時候,注意一定要使用NTP時間服務器。這樣可以保證MongoDB集群成原則之間正確同步。