大量SQL語句文本,如何快速導入到MySQL中?

目錄

  • MongoDB服務器CPU一直很高,最高達到900%,多是哪些緣由?
  • MySQL運行環境中,當發現系統已經用到了swap,該怎麼處理?
  • 大量SQL語句文本,如何快速導入到MySQL中?

1、MongoDB服務器CPU一直很高,最高達到900%,多是哪些緣由? mysql

答:可能緣由以下:sql

一、高併發場景下,服務器開啓numa數據庫

二、mongo查詢無索引,消耗大量內存和io服務器

三、服務器硬件故障,例如CPU 內存 raid卡等微信

三、高併發寫入下開啓讀寫分離+oplog應用加鎖 session

四、高併發短連接+最新SCRAM-SHA-1認證的狀況多線程

2、MySQL運行環境中,當發現系統已經用到了swap,該怎麼處理?併發

答:通常來講,發生swap的緣由是系統認爲內存不夠了。app

那麼,當物理內存真的不夠了,或者著名的NUMA都是引發swap的可能緣由。一般的應對方法有幾種:高併發

一、經過BIOS、系統內核參數關閉NUMA,或者在mysqld啓動時,利用numactl關閉NUMA的使用

二、調低系統使用swap的權重,設置內核參數 參數 vm.swappiness 不高s 不高於10

三、Linux下使用free命令查看內存使用狀況,確認是否發生了內存泄露,能夠去微信公衆號「老葉茶館」中發送「OOM」

四、修改MySQL參數innodb_flush_method = O_DIRECT,這樣InnoDB在讀寫物理數據的時候會繞過cache來訪問磁盤

五、優化SQL效率,避免產生額外的分組、排序、臨時表狀況發生,參考文章:文章:http://t.cn/EwLIuFv

六、在【夜間或業務不繁忙】時適合執行 swapoff -a,並執行sync刷新操做系統內存髒頁到硬盤

3、大量SQL語句文本,如何快速導入到MySQL中?

答:

一、可在SQL文本前,添加set session sql_log_bin=0(須要在從庫也導入一次)。

二、導入期間臨時修改參數sync_binlog=10000、innodb_flush_log_at_trx_commit=0、innodb_autoinc_lock_mode=2

三、導入前,根據業務狀況看可否刪除除了自增列主鍵外的其餘索引。

四、將SQL文件切割成多份,再併發多線程導入。

五、若該SQL文件是每一個INSERT一行,須要先行將多行合併成一行,即啓用extended-insert模式。

六、以上建議,在線上環境請謹慎評估該騷操做的風險性。

七、以上建議,僅考慮儘快導入,涉及到和具體業務需求相沖突時(例如太快導入反倒會影響在線數據庫性能),以實際狀況爲主。


公衆號:知數堂,更多MySQL乾貨知識,關注公衆號獲取。

原文連接:https://zhishutang.com/uxF
推薦閱讀:https://zhishutang.com/xdI

相關文章
相關標籤/搜索