1. 程式人生 > 其它 >LeetCode:1128. Number of Equivalent Domino Pairs等價多米諾骨牌對的數量(C語言)

LeetCode:1128. Number of Equivalent Domino Pairs等價多米諾骨牌對的數量(C語言)

技術標籤:mysql

MySQL優化三大方向

優化MySQL所在伺服器核心。
對MySQL配置引數進行優化(my.cnf)此優化需要進行壓力測試來進行引數調整。
對SQL語句以及表優化。

伺服器核心方面優化:

網路引數配置需要修改配置檔案/etc/sysctl.conf,可以在配置檔案後面新增以下內容:

net.core.somaxconn=65536     #每個監聽埠允許的最大的監聽佇列長度,這個值應該適當增大。
net.core.netdev_max_backlog=65536     #當網路埠接受資料包的速率比核心處理資料速度快時,允許傳送到佇列中的最大包數。
net.ipv4.tcp_max_syn_backlog=65536     #還未獲得連結的請求可保持在佇列中的數量,當超過這個數目時,連結請求就可能被拋棄。
net.ipv4.tcp_fin_timeout=10     #tcp連結等待時間,調整這個引數目的是為了加快tcp連結回收的速度。
net.ipv4.tcp_tw_reuse=1     #加快tcp連結回收的速度
net.ipv4.tcp_tw_recycle=1     #加快tcp連接回收的速度

以下四個引數設定tcp連結接受和傳送資料時緩衝區大小的最大值和預設值,應該將其調整的更大一些。

net.core.wmem_default=87380
net.core.wmem_max=16777216
net.core.rmem_default=87380
net.core.rmem_max=16777216

以下三個引數用於減少時效的tcp連結所佔用的資源,提升資源回收效率,改的較小一些。

net.ipv4.tcp_keepalive_time=100     #代表TCP傳送keepalive探測訊息的時間間隔
net.ipv4.tcp_keepalive_intvl=10     #代表當TCp傳送keepalive探測訊息未獲得確認是重發探測訊息的時間間隔
net.ipv4.tcp_keepalive_probes=3     #代表TCP連結失效之前,最多傳送多少keepalive探測訊息

記憶體相關引數配置:
記憶體的相關引數同樣修改/etc/sysctl.conf檔案:

kernel.shmmax=2147483648     #用於定義單個共享記憶體段的最大值,這個引數應該設定的足夠大,以便共享記憶體段能容納下整個InnoDB緩衝池的大小。建議設定成實體記憶體的一半。
vm.swappiness=0 表示除非虛擬記憶體使用完了,否則不用swap分割槽。

特定資源限制配置:
這個配置需要修改配置檔案/etc/security/limits.conf,主要就是對開啟檔案數量的配置,在MySQL的InnoDB儲存引擎中,每一張表就對應著2-3個檔案,對於允許開啟檔案的數量適當增大,可以使MySQL的資料庫效能更好。

開啟檔案數的配置:

* soft nofile 65535
* hard nofile 65535
* 表示對所有使用者生效
soft 表示是當前系統生效的設定
hard 表示系統中所能設定的最大值
nofile 表示所限制的資源是開啟檔案的數量

磁碟排程策略配置
一般預設情況下,centos系統的磁碟排程策略是完全公平佇列模式(cfg),這種排程策略對於資料庫伺服器來說不太適合,而應該使用deadline排程策略。
通過以下命令可以修改排程策略:

echo deadline>/sys/block/devname/queue/scheduler

MySQL引數優化:

1.MySQL預設的最大連線數為100,可以在MySQL客戶端使用以下命令檢視:

mysql> show variables like 'max_connections';

在這裡插入圖片描述

2.檢視當前訪問MySQL的執行緒:

mysql> show processlist;

在這裡插入圖片描述
3.設定最大連線數:
注:最大可設定16384。

mysql> set global max_connections = 5000;

在這裡插入圖片描述
4.檢視當前被使用的connections:

mysql> show global status like 'max_user_connections'

對MySQL語句效能優化:

1.為查詢快取優化查詢。
2.EXPLAIN我們的select查詢(可以檢視執行的行數)。
3.當只要一行資料時使用limit 1。
4.為搜尋欄位建立索引。
5.在join表的時候使用想當型別的列,並將其索引。
6.千萬不要order by rand()。
7.避免select * 查詢。
8.永遠為每張表設定一個ID。
9.可以使用enum而不要varchar。
10.儘可能使用not null。
11.固定長度的表會更快。
12.垂直分割。
13.小心“永久連結”。