1. 程式人生 > 實用技巧 >升級專案安全連線字串-步驟

升級專案安全連線字串-步驟

1.資料庫硬體優化(選型)

1.一般資料庫選擇

1.真實的硬體,物理機
2.雲產品ECS,自己搭建資料庫
3.雲資料庫(RDS、DRDS)

2.資料庫型別

1.OLTP   線上事務處理系統
	支援大量併發使用者定期新增和修改資料。
	反映隨時變化的單位狀態,但不儲存其歷史記錄。
	包含大量資料,其中包括用於驗證事務的大量資料。
	可以進行優化以對事務活動做出響應。
	提供用於支援單位日常運營的技術基礎結構。
	個別事務能夠很快地完成,並且只需訪問相對較少的資料。
	實時性要求高。
	交易一般是確定的,所以OLTP是對確定性的資料進行存取。(比如存取款都有一個特定的金額)
	併發性要求高並且嚴格的要求事務的完整、安全性。

2.OLAP   資料倉庫,資料處理,資料展示(使用nosql更適合)
	ROLAP
	MOLAP
	HOLAP

3.硬體選型

1)CPU選型:
1.IO密集型:線上系統,OLTP主要是IO密集型的業務,高併發(OLTP),E系列(至強),主頻相對低,核心數量多
2.CPU密集型:資料分析資料處理,OLAP,cpu密集型的,需要CPU高計算能力(OLAP,不需要很高的併發,計算只用一個使用者就可以了),I系列的(IBM),主頻很高,核心少 (打遊戲一般選擇CPU密集型)

2)記憶體選擇:
1.建議2-3倍cpu核心數量 (ECC)
2.記憶體越大它使用越多,浪費越多,命中率越低

3)磁碟選擇:
1.SATA-III   
2.SAS    
3.Fc    
4.SSD(sata) 
	pci-e  級別
	Flash  級別

4)儲存選擇(一般大型企業)

5)網路選擇:
1.硬體買好的(單卡單口,網絡卡有很多個口,選擇單口的,效能更好)
	一般可以插4塊卡,兩個內網兩個外網,避免一塊出現問題就掛掉
2.網絡卡繫結(bonding),交換機堆疊
	意思就像負載均衡,將兩塊網絡卡邏輯繫結,一個網絡卡繫結一個交換機,如果做了網絡卡繫結,交換機也一定要做堆疊
	繫結方式:負載均衡模式,主備模式

4.作業系統優化

1)Swap調整:
echo 0 >/proc/sys/vm/swappiness的內容改成0(臨時),

/etc/sysctl.conf 上新增 vm.swappiness=0(永久)
sysctl -p

這個引數決定了Linux是傾向於使用swap,還是傾向於釋放檔案系統cache。在記憶體緊張的情況下,數值越低越傾向於釋放檔案系統cache。
當然,這個引數只能減少使用swap的概率,並不能避免Linux使用swap。

2)IO排程策略:
centos 7 預設是deadline
cat /sys/block/sda/queue/scheduler

#臨時修改為deadline(centos6)
echo deadline > /sys/block/sda/queue/scheduler 

vi /boot/grub/grub.conf
更改到如下內容:
kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet

5.應用端優化

1. 減少爛SQL:不走索引,複雜邏輯,切割大事務(插入100萬條資料可以拆成100條插入一次)
2. 避免業務邏輯錯誤
3. 說白了就是使用資料庫時,操作標準一些

2.建立資料庫

1.建立一個庫一個表,並插入100萬資料

#建立庫
create database opt
use opt
#建立表
create table test(id int(11),num int(11),k1 char(2),k2 char(4),dt timestamp not null);

#插入100萬資料
delimiter //
create procedure rand_data(in num int)
begin
declare str char(62) default 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
declare str2 char(2);
declare str4 char(4);
declare i int default 0;
while i<num do
set str2=concat(substring(str,1+floor(rand()*61),1),substring(str,1+floor(rand()*61),1));
set str4=concat(substring(str,1+floor(rand()*61),2),substring(str,1+floor(rand()*61),2));
set i=i+1;
insert into test values(i,floor(rand()*num),str2,str4,now());
end while;
end;
//
delimiter;

mysql> call rand_data(1000000)

2.檢視資料可用性

mysql -uroot -p123
select count(*) from opt.test;

3.進行壓力測試

mysqlslap --defaults-file=/etc/my.cnf \
--concurrency=100 --iterations=1 --create-schema='opt' \
--query="select * from opt.test where num='505037'" engine=innodb \
--number-of-queries=20000 -uroot -p123 -verbose