十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
一、檢查系統(tǒng)的狀態(tài)
專注于為中小企業(yè)提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)潞城免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了成百上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
通過操作系統(tǒng)的一些工具檢查系統(tǒng)的狀態(tài),比如CPU、內(nèi)存、交換、磁盤的利用率,根據(jù)經(jīng)驗或與系統(tǒng)正常時的狀態(tài)相比對,有時系統(tǒng)表面上看起來看空閑,這也可能不是一個正常的狀態(tài),因為cpu可能正等待IO的完成。除此之外,還應(yīng)觀注那些占用系統(tǒng)資源(cpu、內(nèi)存)的進程。
1.使用sar來檢查操作系統(tǒng)是否存在IO問題
#sar-u210—
即每隔2秒檢察一次,共執(zhí)行20次。
結(jié)果示例:
注:在redhat下,%system就是所謂的%wio。
Linux2.4.21-20.ELsmp
(YY075)05/19/2005
10:36:07AMCPU%user%nice%system%idle
10:36:09AMall0.000.000.1399.87
10:36:11AMall0.000.000.00100.00
10:36:13AMall0.250.000.2599.49
10:36:15AMall0.130.000.1399.75
10:36:17AMall0.000.000.00100.00
其中:
%usr指的是用戶進程使用的cpu資源的百分比;
%sys指的是系統(tǒng)資源使用cpu資源的百分比;
%wio指的是等待io完成的百分比,這是值得觀注的一項;
%idle即空閑的百分比。
如果wio列的值很大,如在35%以上,說明系統(tǒng)的IO存在瓶頸,CPU花費了很大的時間去等待I/O的完成。Idle很小說明系統(tǒng)CPU很忙。像以上的示例,可以看到wio平均值為11,說明I/O沒什么特別的問題,而idle值為零,說明cpu已經(jīng)滿負(fù)荷運行了。
2.使用vmstat監(jiān)控內(nèi)存
cpu資源
[root@mysql1
~]#
vmstat
procs
———–memory———-—swap–
—–io—-–system–
—–cpu——
r
b
swpd
free
buff
cache
si
so
bi
bo
in
cs
us
sy
id
wa
st
72
25428
54712672264
14
43
53
59
1
198
vmstat
的輸出那些信息值得關(guān)注?
io
bo:
磁盤寫的數(shù)據(jù)量稍大,如果是大文件的寫,10M以內(nèi)基本不用擔(dān)心,如果是小文件寫2M以內(nèi)基本正常
①
CPU問題
下面幾列需要被察看,以確定cpu是否有問題
Processesinthe
run
queue
(procs
r)
Usertime
(cpu
us)
System
time
(cpu
sy)
Idle
time
(cpu
id)
問題情況:
如果processes
in
run
queue
(procs
r)的數(shù)量遠大于系統(tǒng)中cpu的數(shù)量,將會使系統(tǒng)便慢。
如果這個數(shù)量是cpu的4倍的話,說明系統(tǒng)正面臨cpu能力短缺,這將使系統(tǒng)運行速度大幅度降低
如果cpu的idle時間經(jīng)常為0的話,或者系統(tǒng)占用時間(cpu
sy)是用戶占用時間(cpu
us)兩輩的話,系統(tǒng)面臨缺少cpu資源
解決方案
:
解決這些情況,涉及到調(diào)整應(yīng)用程序,使其能更有效的使用cpu,同時增加cpu的能力或數(shù)量
②內(nèi)存問題
主要查看頁導(dǎo)入的數(shù)值(swap中的si),如果該值比較大就要考慮內(nèi)存,大概方法如下:
最簡單的,加大RAM
減少RAM的需求
3.磁盤IO問題
處理方式:做raid10提高性能
4.網(wǎng)絡(luò)問題
telnet一下MySQL對外開放的端口,如果不通的話,看看防火墻是否正確設(shè)置了。另外,看看MySQL是不是開啟了skip-networking的選項,如果開啟請關(guān)閉。
mysql的其他數(shù)據(jù)查詢是否也比較慢
在mysql里調(diào)整運行參數(shù),簡單的方法,是啟動時選擇不通的my**.ini
MySQL 在崩潰恢復(fù)時,會遍歷打開所有 ibd 文件的 header page 驗證數(shù)據(jù)字典的準(zhǔn)確性,如果 MySQL 中包含了大量表,這個校驗過程就會比較耗時。 MySQL 下崩潰恢復(fù)確實和表數(shù)量有關(guān),表總數(shù)越大,崩潰恢復(fù)時間越長。另外磁盤 IOPS 也會影響崩潰恢復(fù)時間,像這里開發(fā)庫的 HDD IOPS 較低,因此面對大量的表空間,校驗速度就非常緩慢。另外一個發(fā)現(xiàn),MySQL 8 下正常啟用時居然也會進行表空間校驗,而故障恢復(fù)時則會額外再進行一次表空間校驗,等于校驗了 2 遍。不過 MySQL 8.0 里多了一個特性,即表數(shù)量超過 5W 時,會啟用多線程掃描,加快表空間校驗過程。
如何跳過校驗MySQL 5.7 下有方法可以跳過崩潰恢復(fù)時的表空間校驗過程嘛?查閱了資料,方法主要有兩種:
1. 配置 innodb_force_recovery可以使 srv_force_recovery != 0 ,那么 validate = false,即可以跳過表空間校驗。實際測試的時候設(shè)置 innodb_force_recovery =1,也就是強制恢復(fù)跳過壞頁,就可以跳過校驗,然后重啟就是正常啟動了。通過這種臨時方式可以避免崩潰恢復(fù)后非常耗時的表空間校驗過程,快速啟動 MySQL,個人目前暫時未發(fā)現(xiàn)有什么隱患。2. 使用共享表空間替代獨立表空間這樣就不需要打開 N 個 ibd 文件了,只需要打開一個 ibdata 文件即可,大大節(jié)省了校驗時間。自從聽了姜老師講過使用共享表空間替代獨立表空間解決 drop 大表時性能抖動的原理后,感覺共享表空間在很多業(yè)務(wù)環(huán)境下,反而更有優(yōu)勢。
臨時冒出另外一種解決想法,即用 GDB 調(diào)試崩潰恢復(fù),通過臨時修改 validate 變量值讓 MySQL 跳過表空間驗證過程,然后讓 MySQL 正常關(guān)閉,重新啟動就可以正常啟動了。但是實際測試發(fā)現(xiàn),如果以 debug 模式運行,確實可以臨時修改 validate 變量,跳過表空間驗證過程,但是 debug 模式下代碼運行效率大打折扣,反而耗時更長。而以非 debug 模式運行,則無法修改 validate 變量,想法破滅。
網(wǎng)絡(luò)問題。docker對網(wǎng)絡(luò)環(huán)境的要求高,若是為網(wǎng)絡(luò)環(huán)境差mysql下載不下來。Docker是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的鏡像中,然后發(fā)布到任何流行的Linux或Windows操作系統(tǒng)的機器上,也可以實現(xiàn)虛擬化。
mysqlexecutebatch效率慢
1. 數(shù)據(jù)查詢過慢一般是索引問題,可能是因為選錯索引,也可能是因為查詢的行數(shù)太多。
2.客戶端和數(shù)據(jù)庫連接數(shù)過小,會限制sql的查詢并發(fā)數(shù),增大連接數(shù)可以提升速度。
3.innodb里會有一層內(nèi)存buffer pool用于提升查詢速度,命中率一般99%,如果低于這個值,可以考慮增大buffer pool的大小,這樣也可以提升速度。
第一次計算的耗時,主要還是花在了加載DLL上;我們是這么做的,在下面的事件里先實例化要用到的類 public Form1() { InitializeComponent(); public myClass mc; } 這樣就把加載動作放到了窗體生成事件中,調(diào)用的時候自然就快了。 但是加載的東...