本文目錄一覽:
- 1、簡述提高mysql數據庫服務器性能的措施有哪些
- 2、網站訪問量大 怎樣優化mysql數據庫
- 3、linux服務器mysql數據庫怎麼配置
- 4、建mysql數據庫服務器
- 5、北大青鳥java培訓:mysql數據庫的優化方法?
- 6、mysql數據庫最大能支持多少並發量
簡述提高mysql數據庫服務器性能的措施有哪些
簡述提高mysql數據庫服務器性能的措施有哪些
1,存儲引擎,根據應用選擇合適的引擎
2,索引 —-這個就有很多文章了,具體需要你自己去了解
3,sql語句優化,查詢條件的選擇之類
4,mysql自身系統配置,需要針對應用去定製
5,表的選擇,臨時表,或者分區表,也需要針對應用的情況去選擇使用
網站訪問量大 怎樣優化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和程序員多溝涌,多備份(備份我至少會做到本地和異地雙備份),多測試,數據的事是最大的事,出不得半點差錯,切記切記。
linux服務器mysql數據庫怎麼配置
linux服務器mysql數據庫配置
mysql最流行的關係型數據庫之一,目前隸屬於oracle公司,因體積小、速度快、總體擁有成本低,開放源代碼這一特點,所以是我們日常開發的首選。
工具/原料
mysql5.6
cnetos
方法/步驟
查找以前是否安裝有mysql,使用下面命令:
rpm -qa|grep -i mysql
如果顯示有如下包則說明已安裝mysql
mysql-4.1.12-3.RHEL4.1
mysqlclient10-3.23.58-4.RHEL4.1
如果已安裝,則需要刪除已安裝的數據庫,使用以下命令來刪除數據庫
刪除命令:rpm -e –nodeps 包名
( rpm -ev mysql-4.1.12-3.RHEL4.1 )
刪除老版本mysql的開發頭文件和庫
命令:rm -fr /usr/lib/mysql
rm -fr /usr/include/mysql
注意:卸載後/var/lib/mysql中的數據及/etc/my.cnf不會刪除,如果確定沒用後就手工刪除
rm -f /etc/my.cnf
rm -fr /var/lib/mysql
下載mysql的rpm包
可以通過wget下載具體的地址因為不能用鏈接請大家去官網去找
(1)MySQL-server-5.6.10-1.rhel5.x86_64.rpm:MySQL服務器;
(2)MySQL-client-5.6.10-1.rhel5.x86_64.rpm:MySQL客戶端;
(3)MySQL-devel-5.6.10-1.rhel5.x86_64.rpm:Mysql開發依賴包。
下載後放到Liunx服務器中,如圖所示
安裝MySQL Server的rpm包
rpm -ivh MySQL-server-5.6.21-1.linux_glibc2.5.x86_64.rpm
安裝過程如圖所示
安裝完成後會生成root用戶的隨機密碼,請使用「cat /root/.mysql_secret」或類似命令進行查看。
安裝MySQL客戶端
rpm -ivh MySQL-client-5.6.21-1.linux_glibc2.5.x86_64.rpm
安裝MySQL開發依賴包
rpm -ivh MySQL-devel-5.6.21-1.linux_glibc2.5.x86_64.rpm
啟動msyql
安裝完成後mysql是沒有啟動的,運行mysql命令會提示如下錯誤:
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
可使用如下命令啟動MySQL:
service mysql start
或者使用如下命令:
/etc/init.d/mysql start
可使用SET PASSWORD命令修改root用戶的密碼,參考如下:SET PASSWORD = PASSWORD(‘root123456’);
建mysql數據庫服務器
需要用到集群,負載均衡及mysql 複製(replication);
下面提供一個系統模型你可以參考一下:
集群的結構為一個主MySQL服務器(Master)服務器與多個從屬MySQL服務器(Slave)建立複製(replication)連接,主服務器與從屬服務器實現一定程度上的數據同步,多個從屬服務器存儲相同的數據副本,實現數據冗餘,提供容錯功能。部署開發應用系統時,對數據庫操作代碼進行優化,將寫操作(如UPDATE、INSERT)定向到主服務器,把大量的查詢操作(SELECT)定向到從屬服務器,實現集群的負載均衡功能。如果主服務器發生故障,從屬服務器將轉換角色成為主服務器,使應用系統為終端用戶提供不間斷的網絡服務;主服務器恢復運行後,將其轉換為從屬服務器,存儲數據庫副本,繼續對終端用戶提供數據查詢檢索服務。
北大青鳥java培訓:mysql數據庫的優化方法?
我們都知道,服務器數據庫的開發一般都是通過java或者是PHP語言來編程實現的,而為了提高我們數據庫的運行速度和效率,數據庫優化也成為了我們每日的工作重點,今天,福建IT培訓就一起來了解一下mysql服務器數據庫的優化方法。
為什麼要了解索引真實案例案例一:大學有段時間學習爬蟲,爬取了知乎300w用戶答題數據,存儲到mysql數據中。
那時不了解索引,一條簡單的「根據用戶名搜索全部回答的sql「需要執行半分鐘左右,完全滿足不了正常的使用。
案例二:近線上應用的數據庫頻頻出現多條慢sql風險提示,而工作以來,對數據庫優化方面所知甚少。
例如一個用戶數據頁面需要執行很多次數據庫查詢,性能很慢,通過增加超時時間勉強可以訪問,但是性能上需要優化。
索引的優點合適的索引,可以大大減小mysql服務器掃描的數據量,避免內存排序和臨時表,提高應用程序的查詢性能。
索引的類型mysql數據中有多種索引類型,primarykey,unique,normal,但底層存儲的數據結構都是BTREE;有些存儲引擎還提供hash索引,全文索引。
BTREE是常見的優化要面對的索引結構,都是基於BTREE的討論。
B-TREE查詢數據簡單暴力的方式是遍歷所有記錄;如果數據不重複,就可以通過組織成一顆排序二叉樹,通過二分查找算法來查詢,大大提高查詢性能。
而BTREE是一種更強大的排序樹,支持多個分支,高度更低,數據的插入、刪除、更新更快。
現代數據庫的索引文件和文件系統的文件塊都被組織成BTREE。
btree的每個節點都包含有key,data和只想子節點指針。
btree有度的概念d=1。
假設btree的度為d,則每個內部節點可以有n=[d+1,2d+1)個key,n+1個子節點指針。
樹的大高度為h=Logb[(N+1)/2]。
索引和文件系統中,B-TREE的節點常設計成接近一個內存頁大小(也是磁盤扇區大小),且樹的度非常大。
這樣磁盤I/O的次數,就等於樹的高度h。
假設b=100,一百萬個節點的樹,h將只有3層。
即,只有3次磁盤I/O就可以查找完畢,性能非常高。
索引查詢建立索引後,合適的查詢語句才能大發揮索引的優勢。
另外,由於查詢優化器可以解析客戶端的sql語句,會調整sql的查詢語句的條件順序去匹配合適的索引。
mysql數據庫最大能支持多少並發量
MySQL服務器的最大並發連接數是16384。
受服務器配置,及網絡環境等制約,實際服務器支持的並發連接數會小一些。主要決定因素有:
1、服務器CPU及內存的配置。
2、網絡的帶寬。互聯網連接中上行帶寬的影響尤為明顯。
擴展資料:
優化數據庫結構:
組織數據庫的schema、表和字段以降低I/O的開銷,將相關項保存在一起,並提前規劃,以便隨着數據量的增長,性能可以保持較高的水平。
設計數據表應盡量使其佔用的空間最小化,表的主鍵應儘可能短。·對於InnoDB表,主鍵所在的列在每個輔助索引條目中都是可複製的,因此如果有很多輔助索引,那麼一個短的主鍵可以節省大量空間。
僅創建需要改進查詢性能的索引。索引有助於檢索,但是會增加插入和更新操作的執行時間。
InnoDB的ChangeBuffering特性:
InnoDB提供了changebuffering的配置,可減少維護輔助索引所需的磁盤I/O。大規模的數據庫可能會遇到大量的表操作和大量的I/O,以保證輔助索引保持最新。當相關頁面不在緩衝池裏面時,InnoDB的changebuffer將會更改緩存到輔助索引條目。
從而避免因不能立即從磁盤讀取頁面而導致耗時的I/O操作。當頁面被加載到緩衝池時,緩衝的更改將被合併,更新的頁面之後會刷新到磁盤。這樣做可提高性能,適用於MySQL5.5及更高版本。
參考資料來源:百度百科-MySQL數據庫
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/309814.html