當前位置:首頁 » 密碼管理 » mysql訪問量

mysql訪問量

發布時間: 2022-10-03 00:40:00

㈠ 怎樣給訪問量過大的mysql資料庫減壓

單機MySQL資料庫的優化
一、伺服器硬體對MySQL性能的影響

①磁碟尋道能力(磁碟I/O),我們現在上的都是SAS15000轉的硬碟。MySQL每秒鍾都在進行大量、復雜的查詢操作,對磁碟的讀寫量可想而知。
所以,通常認為磁碟I/O是制約MySQL性能的最大因素之一,對於日均訪
問量在100萬PV以上的Discuz!論壇,由於磁碟I/O的制約,MySQL的性能會非常低下!解決這一制約因素可以考慮以下幾種解決方案:
使用RAID1+0磁碟陣列,注意不要嘗試使用RAID-5,MySQL在RAID-5磁碟陣列上的效率不會像你期待的那樣快。
②CPU 對於MySQL應用,推薦使用DELL R710,E5620 @2.40GHz(4 core)* 2 ,我現在比較喜歡DELL R710,也在用其作Linuxakg 虛擬化應用;
③物理內存對於一台使用MySQL的Database Server來說,伺服器內存建議不要小於2GB,推薦使用4GB以上的物理內存,不過內存對於現在的伺服器而言可以說是一個可以忽略的問題,工作中遇到高端伺服器基本上內存都超過了32G。
我們工作中用得比較多的資料庫伺服器是HP DL580G5和DELL R710,穩定性和性能都不錯;特別是DELL R710,我發現許多同行都是採用它作資料庫的伺服器,所以重點推薦下。

二、MySQL的線上安裝我建議採取編譯安裝的方法,這樣性能上有較大提升,伺服器系統我建議用64bit的Centos5.5,源碼包的編譯參數會默
認以Debgu模式生成二進制代碼,而Debug模式給MySQL帶來的性能損失是比較大的,所以當我們編譯准備安裝的產品代碼時,一定不要忘記使用「—
without-debug」參數禁用Debug模式。而如果把—with-mysqld-ldflags和—with-client-ldflags二
個編譯參數設置為—all-static的話,可以告訴編譯器以靜態方式編譯和編譯結果代碼得到最高的性能。使用靜態編譯和使用動態編譯的代碼相比,性能
差距可能會達到5%至10%之多。我參考了簡朝陽先生的編譯參數,特列如下,供大家參考
./configure
–prefix=/usr/local/mysql –without-debug –without-bench
–enable-thread-safe-client –enable-assembler –enable-profiling
–with-mysqld-ldflags=-all-static –with-client-ldflags=-all-static
–with-charset=latin1 –with-extra-charset=utf8,gbk –with-innodb
–with-csv-storage-engine –with-federated-storage-engine
–with-mysqld-user=mysql –without-我是怎麼了ded-server
–with-server-suffix=-community
–with-unix-socket-path=/usr/local/mysql/sock/mysql.sock
三、MySQL自身因素當解決了上述伺服器硬體制約因素後,讓我們看看MySQL自身的優化是如何操作的。對 MySQL自身的優化主要是對其配置文件my.cnf中的各項參數進行優化調整。下面我們介紹一些對性能影響較大的參數。
下面,我們根據以上硬體配置結合一份已經優化好的my.cnf進行說明:
#vim /etc/my.cnf
以下只列出my.cnf文件中[mysqld]段落中的內容,其他段落內容對MySQL運行性能影響甚微,因而姑且忽略。
[mysqld]
port = 3306
serverid = 1
socket = /tmp/mysql.sock
skip-locking
#避免MySQL的外部鎖定,減少出錯幾率增強穩定性。
skip-name-resolve
#禁止MySQL對外部連接進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。但需要注意,如果開啟該選項,則所有遠程主機連接授權都要使用IP地址方式,否則MySQL將無法正常處理連接請求!
back_log = 384

#back_log參數的值指出在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆棧中。
如果系統在一個短時間內有很多連接,則需要增大該參數的值,該參數值指定到來的TCP/IP連接的偵聽隊列的大小。不同的操作系統在這個隊列大小上有它自
己的限制。 試圖設定back_log高於你的操作系統的限制將是無效的。默認值為50。對於Linux系統推薦設置為小於512的整數。
key_buffer_size = 384M
#key_buffer_size指定用於索引的緩沖區大小,增加它可得到更好的索引處理性能。對於內存在4GB左右的伺服器該參數可設置為256M或384M。注意:該參數值設置的過大反而會是伺服器整體效率降低!
max_allowed_packet = 4M
thread_stack = 256K
table_cache = 614K
sort_buffer_size = 6M
#查詢排序時所能使用的緩沖區大小。注意:該參數對應的分配內存是每連接獨占,如果有100個連接,那麼實際分配的總共排序緩沖區大小為100 × 6 = 600MB。所以,對於內存在4GB左右的伺服器推薦設置為6-8M。
read_buffer_size = 4M
#讀查詢操作所能使用的緩沖區大小。和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享。
join_buffer_size = 8M
#聯合查詢操作所能使用的緩沖區大小,和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享。
myisam_sort_buffer_size = 64M
table_cache = 512
thread_cache_size = 64
query_cache_size = 64M

#指定MySQL查詢緩沖區的大小。可以通過在MySQL控制台觀察,如果Qcache_lowmem_prunes的值非常大,則表明經常出現緩沖不

的情況;如果Qcache_hits的值非常大,則表明查詢緩沖使用非常頻繁,如果該值較小反而會影響效率,那麼可以考慮不用查詢緩
沖;Qcache_free_blocks,如果該值非常大,則表明緩沖區中碎片很多。
tmp_table_size = 256M
max_connections = 768
#指定MySQL允許的最大連接進程數。如果在訪問論壇時經常出現Too Many Connections的錯誤提 示,則需要增大該參數值。
max_connect_errors = 1000
wait_timeout = 10
#指定一個請求的最大連接時間,對於4GB左右內存的伺服器可以設置為5-10。
thread_concurrency = 8
#該參數取值為伺服器邏輯CPU數量*2,在本例中,伺服器有2顆物理CPU,而每顆物理CPU又支持H.T超線程,所以實際取值為4*2=8;這個目前也是雙四核主流伺服器配置。
skip-networking
#開啟該選項可以徹底關閉MySQL的TCP/IP連接方式,如果WEB伺服器是以遠程連接的方式訪問MySQL資料庫伺服器則不要開啟該選項!否則將無法正常連接!
table_cache=1024
#物理內存越大,設置就越大。默認為2402,調到512-1024最佳
innodb_additional_mem_pool_size=4M
#默認為2M
innodb_flush_log_at_trx_commit=1
#設置為0就是等到innodb_log_buffer_size列隊滿後再統一儲存,默認為1
innodb_log_buffer_size=2M
#默認為1M
innodb_thread_concurrency=8
#你的伺服器CPU有幾個就設置為幾,建議用默認一般為8
key_buffer_size=256M
#默認為218,調到128最佳
tmp_table_size=64M
#默認為16M,調到64-256最掛
read_buffer_size=4M
#默認為64K
read_rnd_buffer_size=16M
#默認為256K
sort_buffer_size=32M
#默認為256K
thread_cache_size=120
#默認為60
query_cache_size=32M
※值得注意的是:
很多情況需要具體情況具體分析
一、如果Key_reads太大,則應該把my.cnf中Key_buffer_size變大,保持Key_reads/Key_read_requests至少1/100以上,越小越好。
二、如果Qcache_lowmem_prunes很大,就要增加Query_cache_size的值。

很多時候我們發現,通過參數設置進行性能優化所帶來的性能提升,可能並不如許多人想像的那樣產生質的飛躍,除非是之前的設置存在嚴重不合理的情況。我們
不能將性能調優完全依託於通過DBA在資料庫上線後進行的參數調整,而應該在系統設計和開發階段就盡可能減少性能問題。
【51CTO獨家特稿】如果單MySQL的優化始終還是頂不住壓力時,這個時候我們就必須考慮MySQL的高可用架構(很多同學也愛說成是MySQL集群)了,目前可行的方案有:
一、MySQL Cluster
優勢:可用性非常高,性能非常好。每份數據至少可在不同主機存一份拷貝,且冗餘數據拷貝實時同步。但它的維護非常復雜,存在部分Bug,目前還不適合比較核心的線上系統,所以這個我不推薦。
二、DRBD磁碟網路鏡像方案

優勢:軟體功能強大,數據可在底層快設備級別跨物理主機鏡像,且可根據性能和可靠性要求配置不同級別的同步。IO操作保持順序,可滿足資料庫對數據一致
性的苛刻要求。但非分布式文件系統環境無法支持鏡像數據同時可見,性能和可靠性兩者相互矛盾,無法適用於性能和可靠性要求都比較苛刻的環境,維護成本高於
MySQL Replication。另外,DRBD也是官方推薦的可用於MySQL高可用方案之一,所以這個大家可根據實際環境來考慮是否部署。
三、MySQL Replication

在實際應用場景中,MySQL
Replication是使用最為廣泛的一種提高系統擴展性的設計手段。眾多的MySQL使用者通過Replication功能提升系統的擴展性後,通過
簡單的增加價格低廉的硬體設備成倍
甚至成數量級地提高了原有系統的性能,是廣大MySQL中低端使用者非常喜歡的功能之一,也是許多MySQL使用者選擇MySQL最為重要的原因。
比較常規的MySQL Replication架構也有好幾種,這里分別簡單說明下
MySQL Replication架構一:常規復制架構--Master-slaves,是由一個Master復制到一個或多個Salve的架構模式,主要用於讀壓力大的應用資料庫端廉價擴展解決方案,讀寫分離,Master主要負責寫方面的壓力。
MySQL Replication架構二:級聯復制架構,即Master-Slaves-Slaves,這個也是為了防止Slaves的讀壓力過大,而配置一層二級 Slaves,很容易解決Master端因為附屬slave太多而成為瓶勁的風險。
MySQL Replication架構三:Dual Master與級聯復制結合架構,即Master-Master-Slaves,最大的好處是既可以避免主Master的寫操作受到Slave集群的復制帶來的影響,而且保證了主Master的單點故障。
以上就是比較常見的MySQL replication架構方案,大家可根據自己公司的具體環境來設計 ,Mysql 負載均衡可考慮用LVS或Haproxy來做,高可用HA軟體我推薦Heartbeat。

MySQL
Replication的不足:如果Master主機硬體故障無法恢復,則可能造成部分未傳送到slave端的數據丟失。所以大家應該根據自己目前的網路
規劃,選擇自己合理的Mysql架構方案,跟自己的MySQL
DBA和程序員多溝涌,多備份(備份我至少會做到本地和異地雙備份),多測試,數據的事是最大的事,出不得半點差錯

㈡ 網站訪問量大 怎樣優化mysql資料庫

網站訪問量大,優化mysql資料庫的方法:
1、創建索引
對於查詢佔主要的應用來說,索引顯得尤為重要。很多時候性能問題很簡單的就是因為我們忘了添加索引而造成的,或者說沒有添加更為有效的索引導致。如果不加索引的話,那麼查找任何哪怕只是一條特定的數據都會進行一次全表掃描,如果一張表的數據量很大而符合條件的結果又很少,那麼不加索引會引起致命的性能下降。但是也不是什麼情況都非得建索引不可,比如性別可能就只有兩個值,建索引不僅沒什麼優勢,還會影響到更新速度,這被稱為過度索引。
2、復合索引
比如有一條語句是這樣的:select * from users where area='beijing' and age=22;
如果我們是在area和age上分別創建單個索引的話,由於mysql查詢每次只能使用一個索引,所以雖然這樣已經相對不做索引時全表掃描提高了很多效率,但是如果在area、age兩列上創建復合索引的話將帶來更高的效率。如果我們創建了(area, age, salary)的復合索引,那麼其實相當於創建了(area,age,salary)、(area,age)、(area)三個索引,這被稱為最佳左前綴特性。因此我們在創建復合索引時應該將最常用作限制條件的列放在最左邊,依次遞減。
3、索引不會包含有NULL值的列
只要列中包含有NULL值都將不會被包含在索引中,復合索引中只要有一列含有NULL值,那麼這一列對於此復合索引就是無效的。所以我們在資料庫設計時不要讓欄位的默認值為NULL。
4、使用短索引
對串列進行索引,如果可能應該指定一個前綴長度。例如,如果有一個CHAR(255)的 列,如果在前10 個或20 個字元內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁碟空間和I/O操作。
5、排序的索引問題
mysql查詢只使用一個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此資料庫默認排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列創建復合索引。
6、like語句操作
一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是一個問題。like 「%aaa%」 不會使用索引而like 「aaa%」可以使用索引。
7、不要在列上進行運算
select * from users where YEAR(adddate)<2007;
將在每個行上進行運算,這將導致索引失效而進行全表掃描,因此我們可以改成
select * from users where adddate<『2007-01-01';
8、不使用NOT IN和<>操作
NOT IN和<>操作都不會使用索引將進行全表掃描。NOT IN可以NOT EXISTS代替,id<>3則可使用id>3 or id<3來代替。

㈢ 如何在記事本里改mysql的最大訪問量

  • 通過命令行進行更改。

    注意:(隻影響當前mysql服務進程,mysql重啟後,更改失效)

  • 使用root登錄mysql資料庫,並輸入密碼

    mysql>mysql -u root -p

㈣ mysql中,訪問量可以用觸發器或存儲過程么select某些數據一次相當於訪問量加1

select是不能用觸發器的。只有UPDATE或DELETE操作才能定義觸發器。
如果真的在select上定義了觸發器有什麼後果?不單單是你訪問頁面時會查詢數據,在你修改數據的時候同樣也要查詢數據。這時怎麼區分到底是訪問了還是沒有訪問呢?
存儲過程是預先定義好的mysql「函數」。函數不調用就無法生效,因此不能實現你的需求。
關系資料庫的觸發器和存儲過程是一個非常可選的功能,在大部分情況下,是不需要用到的。觸發器的目的是在你修改資料庫內容時,自動幫助你完成一些工作,保證數據的完整性。存儲過程實質上是把你的一部分操作資料庫的代碼邏輯存儲起來以備調用。其實這些特性都可以用普通的SQL和事務來實現,而且更靈活,更利於設計。因此在使用觸發器或存儲過程之前要慎重。

㈤ mysql最大連接數設置多少合適

MySQL伺服器的連接數並不是要達到最大的100%為好,還是要具體問題具體分析,下面就對MySQL伺服器最大連接數的合理設置進行了詳盡的分析,供您參考。


我們經常會遇見「MySQL: ERROR 1040: Too many connections」的情況,一種是訪問量確實很高,MySQL伺服器抗不住,這個時候就要考慮增加從伺服器分散讀壓力,另外一種情況是MySQL配置文件中max_connections值過小:


mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 256 |

+-----------------+-------+


這台MySQL伺服器最大連接數是256,然後查詢一下伺服器響應的最大連接數:

mysql> show global status like 'Max_used_connections';


MySQL伺服器過去的最大連接數是245,沒有達到伺服器連接數上限256,應該沒有出現1040錯誤,比較理想的設置是:

Max_used_connections / max_connections * 100% ≈ 85%


最大連接數占上限連接數的85%左右,如果發現比例在10%以下,MySQL伺服器連接上線就設置得過高了。

㈥ 在關系型資料庫mysql5.7,能達到25000次/秒的訪問量,應該選擇多少內存的實例規格

在關系型資料庫mysql5.7,能達到25000次/秒的訪問量,應該選擇多少內存的實例規格
RDBMS系統由來已久。NoSQL擁護者們會說RDBMS的高齡是其衰退的標志,不過對於大多數CIO來說,RDBMS的成熟讓人放心。對於大多數情況來說,RDBMS系統是穩定且功能豐富的。相比較而言,大多數NoSQL資料庫則還有很多特性有待實現。

㈦ mysql並發連接數能承受多大的訪問量

並發數和伺服器的性能、帶寬、網站頁面大小各方面有著聯系.

mysql最大並發連接數設置

mysql 默認的最大並發連接為100,默認的連接數無法滿足大量client 連接的請求.
但是可以通過以下方式改變,使用root用戶登錄mysql 系統

引用

mysql > show variables like 』max_connections『;
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 100 |
+-----------------+-------+

在不需要重啟的情況下.通過以下命令更改為300

引用

set global max_connections = 300;

為了保證mysql 重啟能夠生效,還需要編譯 /my.ini (默認)


max_connections = 300

以上完成之後,下次重啟就會使用新的參數。

㈧ 網站訪問量大 怎樣優化mysql資料庫

I 硬體配置優化
CPU選擇:多核的CPU,主頻高的CPU
內存:更大的內存
磁碟選擇:更快的轉速、RAID、陣列卡,
網路環境選擇:盡量部署在區域網、SCI、光纜、千兆網、雙網線提供冗餘、0.0.0.0多埠綁定監聽

II 操作系統級優化
使用64位的操作系統,更好的使用大內存。
設置noatime,nodiratime
[zhangxy@dowload_server1 ~]$ cat /etc/fstab
LABEL=/ / ext3 defaults,noatime,nodiratime 1 1
/dev/sda5 /data xfs defaults,noatime,nodiratime 1 2
優化內核參數
net.ipv4.tcp_keepalive_time=7200
net.ipv4.tcp_max_syn_backlog=1024
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.neigh.default.gc_thresh3 = 2048
net.ipv4.neigh.default.gc_thresh2 = 1024
net.ipv4.neigh.default.gc_thresh1 = 256
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.tcp_syncookies = 1
net.core.netdev_max_backlog = 2048
net.core.dev_weight = 64
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_rfc1337 = 1
net.ipv4.tcp_sack = 0
net.ipv4.tcp_fin_timeout = 20
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_max_orphans = 32768
net.core.optmem_max = 20480
net.core.rmem_default = 16777216
net.core.rmem_max = 16777216
net.core.wmem_default = 16777216
net.core.wmem_max = 16777216
net.core.somaxconn = 500
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_max_tw_buckets = 18000
net.ipv4.ip_forward = 0
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.all.rp_filter = 1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.ip_local_port_range = 5000 65000
kernel.shmmax = 167108864
vm.swappiness=0
加大文件描述符限制
Vim /etc/security/limits.conf
加上
* soft nofile 65535
* hard nofile 65535
文件系統選擇 xfs
/dev/sda5 /data xfs defaults,noatime,nodiratime 1 2

III Mysql設計優化
III.1存儲引擎的選擇
Myisam:資料庫並發不大,讀多寫少,而且都能很好的用到索引,sql語句比較簡單的應用,TB數據倉庫
Innodb:並發訪問大,寫操作比較多,有外鍵、事務等需求的應用,系統內存較大。

III.2命名規則
多數開發語言命名規則:比如MyAdress
多數開源思想命名規則:my_address
避免隨便命名

III.3欄位類型選擇
欄位類型的選擇的一般原則:
根據需求選擇合適的欄位類型,在滿足需求的情況下欄位類型盡可能小。
只分配滿足需求的最小字元數,不要太慷慨。
原因:更小的欄位類型更小的字元數佔用更少的內存,佔用更少的磁碟空間,佔用更少的磁碟IO,以及佔用更少的帶寬。

III.3.1 整型:
見如下圖:

類型

位元組

最小值

最大值

(帶符號的/無符號的)

(帶符號的/無符號的)

TINYINT

1

-128

127

0

255

SMALLINT

2

-32768

32767

0

65535

MEDIUMINT

3

-8388608

8388607

0

16777215

INT

4

-2147483648

2147483647

0

4294967295

BIGINT

8

-9223372036854775808

9223372036854775807

0

18446744073709551615

根據滿足需求的最小整數為選擇原則,能用INT的就不要用BIGINT。
用無符號INT存儲IP,而非CHAR(15)。

III.3.2 浮點型:

類型

位元組

精度類型

使用場景

FLOAT(M,D)

4

單精度

精度要求不高,數值比較小

DOUBLE(M,D)(REAL)

8

雙精度

精度要求不高,數值比較大

DECIMAL(M,D)(NUMERIC)

M+2

自定義精度

精度要求很高的場景

III.3.3 時間類型

類型

取值范圍

存儲空間

零值表示法

DATE

1000-01-01~9999-12-31

3位元組

0000-00-00

TIME

-838:59:59~838:59:59

3位元組

00:00:00

DATETIME

1000-01-01 00:00:00~9999-12-31 23:59:59

8位元組

0000-00-00 00:00:00

TIMESTAMP

19700101000000~2037年的某個時刻

4位元組

00000000000000

YEAR

YEAR(4):1901~2155 YEAR(2):1970~2069

1位元組

0000

III.3.4 字元類型

類型

最大長度

佔用存儲空間

CHAR[(M)]

M位元組

M位元組

VARCHAR[(M)]

M位元組

M+1位元組

TINYBLOD,TINYTEXT

2^8-1位元組

L+1位元組

BLOB,TEXT

2^16-1位元組

L+2

MEDIUMBLOB,MEDIUMTEXT

2^24-1位元組

L+3

LONGBLOB,LONGTEXT

2^32-1位元組

L+4

ENUM('value1','value2',...)

65535個成員

1或2位元組

SET('value1','value2',...)

64個成員

1,2,3,4或8位元組

註:L表示可變長度的意思
對於varchar和char的選擇要根據引擎和具體情況的不同來選擇,主要依據如下原則:
1. 如果列數據項的大小一致或者相差不大,則使用char。
2. 如果列數據項的大小差異相當大,則使用varchar。
3. 對於MyISAM表,盡量使用Char,對於那些經常需要修改而容易形成碎片的myisam和isam數據表就更是如此,它的缺點就是佔用磁碟空間。
4. 對於InnoDB表,因為它的數據行內部存儲格式對固定長度的數據行和可變長度的數據行不加區分(所有數據行共用一個表頭部分,這個標頭部分存放著指向各有關數據列的指針),所以使用char類型不見得會比使用varchar類型好。事實上,因為char類型通常要比varchar類型佔用更多的空 間,所以從減少空間佔用量和減少磁碟i/o的角度,使用varchar類型反而更有利。
5. 表中只要存在一個varchar類型的欄位,那麼所有的char欄位都會自動變成varchar類型,因此建議定長和變長的數據分開。

III.4編碼選擇
單位元組 latin1
多位元組 utf8(漢字佔3個位元組,英文字母佔用一個位元組)
如果含有中文字元的話最好都統一採用utf8類型,避免亂碼的情況發生。

III.5主鍵選擇原則
註:這里說的主鍵設計主要是針對INNODB引擎
1. 能唯一的表示行。
2. 顯式的定義一個數值類型自增欄位的主鍵,這個欄位可以僅用於做主鍵,不做其他用途。
3. MySQL主鍵應該是單列的,以便提高連接和篩選操作的效率。
4. 主鍵欄位類型盡可能小,能用SMALLINT就不用INT,能用INT就不用BIGINT。
5. 盡量保證不對主鍵欄位進行更新修改,防止主鍵欄位發生變化,引發數據存儲碎片,降低IO性能。
6. MySQL主鍵不應包含動態變化的數據,如時間戳、創建時間列、修改時間列等。
7. MySQL主鍵應當有計算機自動生成。
8. 主鍵欄位放在數據表的第一順序。
推薦採用數值類型做主鍵並採用auto_increment屬性讓其自動增長。

III.6其他需要注意的地方
NULL OR NOT NULL
盡可能設置每個欄位為NOT NULL,除非有特殊的需求,原因如下:
1. 使用含有NULL列做索引的話會佔用更多的磁碟空間,因為索引NULL列需要而外的空間來保存。
2. 進行比較的時候,程序會更復雜。
3. 含有NULL的列比較特殊,SQL難優化,如果是一個組合索引,那麼這個NULL 類型的欄位會極大影響整個索引的效率。

索引
索引的缺點:極大地加速了查詢,減少掃描和鎖定的數據行數。
索引的缺點:佔用磁碟空間,減慢了數據更新速度,增加了磁碟IO。
添加索引有如下原則:
1. 選擇唯一性索引。
2. 為經常需要排序、分組和聯合操作的欄位建立索引。
3. 為常作為查詢條件的欄位建立索引。
4. 限制索引的數據,索引不是越多越好。
5. 盡量使用數據量少的索引,對於大欄位可以考慮前綴索引。
6. 刪除不再使用或者很少使用的索引。
7. 結合核心SQL優先考慮覆蓋索引。
8. 忌用字元串做主鍵。

反範式設計
適當的使用冗餘的反範式設計,以空間換時間有的時候會很高效。

IV Mysql軟體優化
開啟mysql復制,實現讀寫分離、負載均衡,將讀的負載分攤到多個從伺服器上,提高伺服器的處理能力。
使用推薦的GA版本,提升性能
利用分區新功能進行大數據的數據拆分

V Mysql配置優化
注意:全局參數一經設置,隨伺服器啟動預佔用資源。
key_buffer_size參數
mysql索引緩沖,如果是採用myisam的話要重點設置這個參數,根據(key_reads/key_read_requests)判斷
innodb_buffer_pool_size參數
INNODB 數據、索引、日誌緩沖最重要的引擎參數,根據(hit riatos和FILE I/O)判斷
wait_time_out參數
線程連接的超時時間,盡量不要設置很大,推薦10s
max_connections參數
伺服器允許的最大連接數,盡量不要設置太大,因為設置太大的話容易導致內存溢出,需要通過如下公式來確定:
SET @k_bytes = 1024;
SET @m_bytes = @k_bytes * 1024;
SET @g_bytes = @m_bytes * 1024;
SELECT
(
@@key_buffer_size + @@query_cache_size + @@tmp_table_size+
@@innodb_buffer_pool_size + @@innodb_additional_mem_pool_size+
@@innodb_log_buffer_size+
@@max_connections *

( @@read_buffer_size + @@read_rnd_buffer_size + @@sort_buffer_size+
@@join_buffer_size + @@binlog_cache_size + @@thread_stack
) )
/ @g_bytes AS MAX_MEMORY_USED_GB;

thread_concurrency參數
線程並發利用數量,(cpu+disk)*2,根據(os中顯示的請求隊列和tickets)判斷
sort_buffer_size參數
獲得更快的--ORDER BY,GROUP BY,SELECT DISTINCT,UNION DISTINCT
read_rnd_buffer_size參數
當根據鍵進行分類操作時獲得更快的--ORDER BY
join_buffer_size參數
join連接使用全表掃描連接的緩沖大小,根據select_full_join判斷
read_buffer_size參數
全表掃描時為查詢預留的緩沖大小,根據select_scan判斷
tmp_table_size參數
臨時內存表的設置,如果超過設置就會轉化成磁碟表,根據參數(created_tmp_disk_tables)判斷
innodb_log_file_size參數(默認5M)
記錄INNODB引擎的redo log文件,設置較大的值意味著較長的恢復時間。
Ø innodb_flush_method參數(默認fdatasync)
Linux系統可以使用O_DIRECT處理數據文件,避免OS級別的cache,O_DIRECT模式提高數據文件和日誌文件的IO提交性能
innodb_flush_log_at_trx_commit(默認1)
表示每秒進行一次log寫入cache,並flush log到磁碟。
表示在每次事務提交後執行log寫入cache,並flush log到磁碟。
表示在每次事務提交後,執行log數據寫入到cache,每秒執行一次flush log到磁碟。

VI Mysql語句級優化
1. 性能查的讀語句,在innodb中統計行數,建議另外弄一張統計表,採用myisam,定期做統計.一般的對統計的數據不會要求太精準的情況下適用。
2. 盡量不要在資料庫中做運算。
3. 避免負向查詢和%前綴模糊查詢。
4. 不在索引列做運算或者使用函數。
5. 不要在生產環境程序中使用select * from 的形式查詢數據。只查詢需要使用的列。
6. 查詢盡可能使用limit減少返回的行數,減少數據傳輸時間和帶寬浪費。
7. where子句盡可能對查詢列使用函數,因為對查詢列使用函數用不到索引。
8. 避免隱式類型轉換,例如字元型一定要用』』,數字型一定不要使用』』。
9. 所有的SQL關鍵詞用大寫,養成良好的習慣,避免SQL語句重復編譯造成系統資源的浪費。
10. 聯表查詢的時候,記得把小結果集放在前面,遵循小結果集驅動大結果集的原則。
11. 開啟慢查詢,定期用explain優化慢查詢中的SQL語句。

熱點內容
一萬級凈化車間有哪些配置 發布:2025-05-15 12:16:41 瀏覽:97
javazip解壓加密 發布:2025-05-15 12:15:02 瀏覽:941
dnf伺服器存放什麼信息 發布:2025-05-15 12:11:07 瀏覽:216
辦公室視頻劇本腳本 發布:2025-05-15 12:03:51 瀏覽:490
編譯失敗什麼意思 發布:2025-05-15 11:58:18 瀏覽:87
lcs腳本官網 發布:2025-05-15 11:56:15 瀏覽:88
三國志戰略版打9級礦什麼配置 發布:2025-05-15 11:41:29 瀏覽:953
安卓加速器怎麼關 發布:2025-05-15 11:38:16 瀏覽:465
密碼鎖壞了如何打開 發布:2025-05-15 11:30:19 瀏覽:838
怎樣增加共享文件夾連接數量 發布:2025-05-15 11:24:50 瀏覽:962