簡單概括。客戶端通過scoket連線與mysql建立連線。然後就可以執行select/insert/update/delete來讀寫資料,由執行引擎來處理。執行引擎首先記錄日誌(undo,redo),寫到日誌記憶體緩衝區中,並在滿足一定條件時flush到磁碟上的日誌檔案中。然後讀/寫資料,也是首先在資料記憶體緩衝區中個讀寫,然後再flush到磁碟上的資料檔案中。
最大連線數。這個引數是第乙個大坑,mysql預設的最大連線數設定為100!這在真實的應用中是無法接受的,所以有必要設定乙個更大的引數。但是同樣也不可能設定為十幾萬,因為連線數還要依照伺服器的配置和處理能力來設定,乙個機器最多支援幾千到幾萬的連線數。本文以4核8g記憶體的普通伺服器而言推薦設定為3000。
max_connection =
3000
每張table資料對應幾個innodb檔案。mysql預設將乙個database的資料存入乙個innodb檔案,但是如果乙個資料庫的表很多,表中資料行也大,那麼就會使innodb資料檔案變得非常大,查詢效能會降低,因此我們通常設定乙個表對應乙個innodb檔案:
innodb_file_per_table =
1
innodb資料記憶體緩衝區大小. innodb儲存引擎讀寫資料一般先在記憶體緩衝區中,再到磁碟中。因此記憶體緩衝區設定的大一些可以加快執行的速度。如果一台伺服器只用作mysql伺服器,一般將該引數設定為物理記憶體大小的60%~80%
innodb_buffer_pool_size =
6g
分別代表日誌檔案大小和日誌記憶體緩衝區大小。日誌檔案大小如果超過innodb_log_file_size,則會重建乙個新的日誌檔案。因此如果設定的過大,那當資料庫掛掉了並採用日誌恢復系統時就會非常慢。如果設定非常小則會頻繁的重建檔案,造成速度降低。innodb_log_buffer_size也要適當,保證從記憶體緩衝區到檔案flush時間不要太長。
innodb_log_file_size =
256m
innodb_log_buffer_size =
16m
提交幾次事務才執行flush日誌檔案。預設為1,代表每次commit都進行日誌磁碟重新整理。如果設定為0mysql則會每隔一段時間輪詢執行write and flush。我們設定這個引數為2,每次事務提交時直接先進行write,當兩個事務提交後才進行flush。保證innodb效能和可靠性。
innodb_flush_log_at_trx_commit =
2
innodb資料檔案路徑。之前通過innodb_file_per_table的設定將每個表的資料放在單獨的資料檔案中,但是如果乙個表中的資料過多,也會對查詢效能產生影響,因此就需要將資料檔案進行拆分。
innodb_data_file_path = ibdata1:
1g;ibdata2:
1g;ibdata3:
1g:autoextend
可以從這個設定看到,資料大小小於1g存入ibdata1檔案,當超過1g存入ibdata2,超過2g存入ibdata3檔案並且自動增張,因為我們無法**資料究竟有多少。 Android應用效能優化
記憶體,ui,電量 1.記憶體 首先簡單介紹一下android系統記憶體管理機制.記憶體共享 預設情況 string vmheapsize systemproperties.get dalvik.vm.heapsize 16m 只有16m.可以通過在device.mk檔案中設定 product pr...
Android應用效能優化
1 anr 2 listview 卡頓,不流暢 3 activity啟動慢 4 動畫不流暢,啟動前卡頓 5 自定義view啟動慢 6 oom 7 資料庫大量操作 8 長時間執行後,程式變慢 1 語言層解決問題,語法上提高效能 2 合理的資料結構和演算法 3 布局優化,布局深度控制 4 工作執行緒與u...
Web應用效能優化思路
瓶頸是什麼?一條4車道的公路,執行非常順暢,突然出了點事故,事故車導致某個地方只剩下1車道,然後就開始堵車,因為四輛車同時塞向乙個車道裡。把這個事故清除了,故障車拖走了,道路會開始恢復了通暢。這個道理誰都懂,但偏偏有些傻瓜交警去把4車道變成8車道,但卻不清理事故路段。乙個web應用,不管是何種語言開...