mysql插入更新慢以及大文本

最近做的項目,遇到了兩個關於mysql的問題以及解決辦法:

一:某個字段的文本值太大。

       解決辦法:打開“my.ini”文件,找到“max_allowed_packet”所在位置(默認是4M),修改爲160M(按照你實際需求情況大小修改),保存。(沒有的話就新增)

      重啓mysql服務,此方法永久生效。但要注意my.ini的位置,(但其實一般在安裝目錄下)大多數都是在C盤的隱藏文件下C:\ProgramData\MySQL\MySQL Server下面。
如:# Maximum size for internal (in-memory) temporary tables. If a table
# grows larger than this value, it is automatically converted to disk
# based table This limitation is for a single table. There can be many
# of them.
tmp_table_size=35M

max_allowed_packet = 160M

查看是否生效:  show VARIABLES like '%max_allowed_packet%'

二:把oralce一個視圖同步到mysql表,一條記錄操作分解插入和更新的時候,mysql性能很低。

    解決辦法:修改innodb_flush_log_at_trx_commit參數 爲2

(一)、參數解釋

0:log buffer將每秒一次地寫入log file中,並且log file的flush(刷到磁盤)操作同時進行。該模式下在事務提交的時候,不會主動觸發寫入磁盤的操作。

1:每次事務提交時MySQL都會把log buffer的數據寫入log file,並且flush(刷到磁盤)中去,該模式爲系統默認。

2:每次事務提交時MySQL都會把log buffer的數據寫入log file,但是flush(刷到磁盤)操作並不會同時進行。該模式下,MySQL會每秒執行一次 flush(刷到磁盤)操作。

(二)、參數修改

找到mysql配置文件mysql.ini,修改成合適的值,然後重啓mysql。

(三)、注意事項
當設置爲0,該模式速度最快,但不太安全,mysqld進程的崩潰會導致上一秒鐘所有事務數據的丟失。

當設置爲1,該模式是最安全的,但也是最慢的一種方式。在mysqld 服務崩潰或者服務器主機crash的情況下,binary log 只有可能丟失最多一個語句或者一個事務。。
當設置爲2,該模式速度較快,也比0安全,只有在操作系統崩潰或者系統斷電的情況下,上一秒鐘所有事務數據纔可能丟失。
四、其他相關
查找資料時候看到其他文章說innodb_flush_log_at_trx_commit和sync_binlog 兩個參數是控制MySQL 磁盤寫入策略以及數據安全性的關鍵參數,當兩個參數都設置爲1的時候寫入性能最差,推薦做法是innodb_flush_log_at_trx_commit=2,sync_binlog=500 或1000

參考:http://blog.itpub.net/22664653/viewspace-1063134/


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章