mongo database效能優化
sql server有工具進行資料庫的優化,mongo database profiler.不僅有,而且功能更強大。
mongodb 自帶 profiler,可以非常方便地記錄下所有耗時過長操作,以便於調優。有兩種方式可以控制 profiling 的開關和級別,第一種是直接在啟動引數裡直接進行設定。
啟動mongodb時加上–profile=級別 即可。
也可以在客戶端呼叫db.setprofilinglevel(級別) 命令來實時配置。可以通過db.getprofilinglevel()命令來獲取當前的profile級別。
> db.setprofilinglevel(2);
www.2cto.com
> db.getprofilinglevel()
上面斜體的級別可以取0,1,2 三個值,他們表示的意義如下:
0 – 不開啟,關閉效能分析,測試環境可以開啟,生成環境關閉,對效能有很大影響
1 – 記錄慢命令 (預設100ms)
2 – 記錄所有命令
profile 記錄在級別1時會記錄慢命令,那麼這個慢的定義是什麼?上面我們說到其預設為100ms,當然有預設就有設定,其設定方法和級別一樣有兩種,一種是通過新增–slowms啟動引數配置。第二種是呼叫db.setprofilinglevel時加上第二個引數:
db.setprofilinglevel( level , slowms )
db.setprofilinglevel( 1 , 10 );
profiler 資訊儲存在 system.profile (capped collection) 中。也可以通過這個工具進行設定和檢視資料:強大的mongodb資料庫管理工具
mongo shell 還提供了乙個比較簡潔的命令show profile,可列出最近5條執行時間超過1ms的 profile 記錄。
檢視當前庫下所有集合的分析資料
db.system.profile.find()
檢視某乙個集合的分析資料
db.system.profile.find()
檢視執行時間大於100毫秒的執行操作,並倒序排列,並取前5行
db.system.profile.find(}).sort().limit(5);
profile 資訊內容詳解:
ts-該命令在何時執行. www.2cto.com
millis time-該命令執行耗時,以毫秒記.
info-本命令的詳細資訊.
query-表明這是乙個query查詢操作.
ntoreturn-本次查詢客戶端要求返回的記錄數.比如, findone()命令執行時 ntoreturn 為 1.有limit(n) 條件時ntoreturn為n.
query-具體的查詢條件(如x>3).
nscanned-本次查詢掃瞄的記錄數.
reslen-返回結果集的大小.
nreturned-本次查詢實際返回的結果集.
update-表明這是乙個update更新操作.
fastmod-indicates a fast modify operation. see updates. these operations are normally quite fast. www.2cto.com
fastmodinsert – indicates a fast modify operation that performed an upsert.
upsert-表明update的upsert引數為true.此引數的功能是如果update的記錄不存在,則用update的條件insert一條記錄.
moved-表明本次update是否移動了硬碟上的資料,如果新記錄比原記錄短,通常不會移動當前記錄,如果新記錄比原記錄長,那麼可能會移動記錄到其它位置,這時候會導致相關索引的更新.磁碟操作更多,加上索引更新,會使得這樣的操作比較慢.
insert-這是乙個insert插入操作.
getmore-這是乙個getmore 操作,getmore通常發生在結果集比較大的查詢時,第乙個query返回了部分結果,後續的結果是通過getmore來獲取的。
2、優化
www.2cto.com
mongodb 查詢優化
如果nscanned(掃瞄的記錄數)遠大於nreturned(返回結果的記錄數)的話,那麼我們就要考慮通過加索引來優化記錄定位了。
reslen 如果過大,那麼說明我們返回的結果集太大了,這時請檢視find函式的第二個引數是否只寫上了你需要的屬性名。(類似於mysql中不要總是select *)
對於建立索引的建議是:如果很少讀,那麼盡量不要新增索引,因為索引越多,寫操作會越慢。如果讀量很大,那麼建立索引還是比較划算的。
mongodb 更新優化
如果寫查詢量或者update量過大的話,多加索引是會有好處的。以及~~~~(省略n字,和rdbms差不多的道理)
use fast modify operations when possible (and usually with these, an index). see updates.
profiler 的效率
profiling 功能肯定是會影響效率的,但是不太嚴重,原因是他使用的是system.profile 來記錄,而system.profile 是乙個capped collection 這種collection 在操作上有一些限制和特點,但是效率更高。 www.2cto.com
優化建議:
如果 nscanned 遠大於 nreturned,那麼需要使用索引。
如果 reslen 返回位元組非常大,那麼考慮只獲取所需的字段。
執行 update 操作時同樣檢查一下 nscanned,並使用索引減少文件掃瞄數量。
使用 db.eval() 在服務端執行某些統計操作。
減少返回文件數量,使用 skip & limit 分頁。
效能測試 效能測試步驟
針對此次庫內作業效能測試,梳理一下期間的工作流程 梳理已有的介面指令碼,確認需要做效能測試的幾個介面,即使用率高,對效能有要求的幾個主要介面。結合頁面的操作,和確認的介面,梳理具體的業務邏輯 同時,請開發人員部署了測試環境。測試環境的伺服器指標,盡量和生產環境一致。部署的時候,負載均衡等情況也盡量和...
《效能之巔》初識效能
效能是一門令人激動 富於變化的學科同時又充滿挑戰的學科。衡量效能乙個重要指標 延時 系統效能是對於整個系統進行研究,包括了所有的硬體元件和整個軟體棧。通用的軟體棧有哪些呢?包括作業系統 os 核心,資料庫和應用程式層。術語中的 全棧 有時候指的是程式應用環境,包含資料庫,應用程式,和 伺服器。效能通...
PHP效能 序 談效能
這裡不談php的效能和其他語言的效能,這裡討論php自身的效能問題。效能是什麼?通俗的來講,效能,就是在固定的環境下能做的事情的多少。為什麼要效能?1 每乙個軟體或 的環境是相對固定的 2 在相當的一段時間內,在保障增加的使用者數量的同時使得當前環境的軟體或 能夠正常執行 3 為了省錢 php的效能...