資料庫優化

2021-08-18 18:19:51 字數 1852 閱讀 4986

資料庫優化

資料庫:

資料庫結構優化

選擇合適的資料型別

讀寫分離

主庫:實現增刪改業務

從庫:實現查詢業務

資料庫表的垂直拆分

專庫專用

乙個資料庫由很多表的構成,每個表對應著不同的業務,垂直切分是指

按照業務將表進行分類,分布到不同的資料庫上面,這樣也就將資料或者說壓力分擔到不同的庫上面

優點:1. 拆分後業務清晰,拆分規則明確。

2. 系統之間整合或擴充套件容易。

3. 資料維護簡單。

缺點:1. 部分業務表無法join,只能通過介面方式解決,提高了系統複雜度。

2. 受每種業務不同的限制存在單庫效能瓶頸,不易資料擴充套件跟效能提高。

3. 事務處理複雜。

資料庫表的水平拆分(有分頁,所以水平拆分不多用)

水平拆分不是將表的資料做分類,而是按照某個欄位的某種規則來分散到多個庫之中,每個表中包含一部分資料。簡單來說,

我們可以將資料的水平切分理解為是按照資料行的切分,就是將表中 的某些行切分到乙個資料庫,而另外的某些行又切分到其他的資料庫中

當單錶的資料量過大,導致增刪查改等操作過慢,這時候需要對錶進行水平拆分。水平拆分的表,每一張表的結構都是完全一致的。

優點:1. 不存在單庫大資料,高併發的效能瓶頸。

2. 對應用透明,應用端改造較少。     

3. 按照合理拆分規則拆分,join操作基本避免跨庫。

4. 提高了系統的穩定性跟負載能力。

缺點:1. 

拆分規則難以抽象。

2. 分片

事務一致性難以解決。

3. 資料多次擴充套件難度跟維護量極大。

4. 跨庫join效能較差。

系統配置優化

資料庫系統配置優化

資料庫是基於作業系統的,目前大多數 mysql 都是安裝在linux 系統之上,所以對於作業系統的一些引數配置也會影響到 mysql 的效能,下面列舉一些常用到的系統配置。

網路方面的配置,要修改檔案

/etc/sysctl.conf

# 增加 tcp 支援的佇列數net.ipv4.tcp_max_syn_backlog = 65535# 減少斷開連線時,資源**net.ipv4.tcp_max_tw_buckets = 8000net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_fin_timeout = 10

開啟檔案數的限制,可以使用 ulimit -a 檢視目錄的各項限制,可以修改檔案

/etc/security/limits.conf ,增加以下內容以修改開啟檔案數量的限制

soft nofile 65535hard nofile 65535

除此之外最好在 mysql 伺服器上關閉 iptables,selinux 等防火牆軟體。

mysql 配置檔案

mysql 可以通過啟動時指定配置引數和使用配置檔案兩種方法進行配置,在一般情況下,配置檔案位於

/etc/my.cnf 或是

/etc/mysql/my.cnf,mysql 查詢配置檔案的順序是可以通過以下方法過的

常用引數說明

selectengine ,round(sum(data_length + index_length) / 1024 / 1024 ,1) as 'total mb'frominformation_schema. tableswheretable_schema not in("information_schema" ,"performance_schema")group byengine;

第三方配置工具使用

percona:

伺服器硬體優化

資料庫優化 資料庫設計優化

一 索引優化 1.首先索引不是越多越好,要視情況而定。因為索引會降低insert和update的效率 insert和update有時可能會重建索引。2.乙個表的索參數量最好不要超過6個,擇優而建。3.專案上線後,根據使用者的查詢條件字段稍微調整資料庫中的字段索引。二 分表 1.縱切 根據表字段來且分...

資料庫引擎優化顧問優化資料庫

現在一直在做的專案,資料量相對也不小,開始的時候沒有覺得,因為是剛開始,資料量還很小,在程式使用過程中速度還挺快,但是隨著資料量的不停的增長,發現程式越來越慢,甚至出現了超時的問題,因此要對程式和資料庫進行優化,前期專案比較緊,沒有針對大資料量業務進行分析設計,所以索引等相關優化沒有做到位,通過後期...

資料庫優化

資料庫優化 1 合理使用索引 索引是資料庫中重要的資料結構,它的根本目的就是提高查詢效率。索引的使用要恰到好處,其使用原則如下 在經常進行連線,但是沒有指定為外來鍵的列上建立索引,而不經常連線的字段則由優化器自動生成索引 在頻繁進行排序或分組 即進行groupby或orderby操作 的列上建立索引...