溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mysql數(shù)據(jù)庫的特性以及參數(shù)性能

發(fā)布時間:2020-05-26 17:45:03 來源:網(wǎng)絡(luò) 閱讀:230 作者:三月 欄目:數(shù)據(jù)庫

本篇文章給大家主要講的是關(guān)于mysql數(shù)據(jù)庫的特性以及參數(shù)性能的內(nèi)容,感興趣的話就一起來看看這篇文章吧,相信看完mysql數(shù)據(jù)庫的特性以及參數(shù)性能對大家多少有點參考價值吧。                

一:mysql與其他數(shù)據(jù)庫的比較

MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),開發(fā)者為瑞典MySQL AB公司,現(xiàn)在已經(jīng)被Sun公司收購,支持FreeBSD、Linux、MAC、Windows等多種操作系統(tǒng)與其他的大型數(shù)據(jù)庫例如Oracle、DB2、SQL Server等相比功能稍弱一些

1、可以處理擁有上千萬條記錄的大型數(shù)據(jù)

2、支持常見的SQL語句規(guī)范

3、可移植行高,安裝簡單小巧

4、良好的運行效率,有豐富信息的網(wǎng)絡(luò)支持

5、調(diào)試、管理,優(yōu)化簡單(相對其他大型數(shù)據(jù)庫)

易用性比較

   從安裝方面來說,MySQL安裝包大小僅100MB左右,與那幾大商業(yè)數(shù)據(jù)庫相比完全不是一個數(shù)量級。它的安裝也比Oracle等商業(yè)數(shù)據(jù)庫容易很多,不論是通過已經(jīng)編譯好的二進(jìn)制分發(fā)包,還是通過源碼編譯安裝,都非常簡單。

性能比較

   MySQL一直以來奉行一個原則,那就是在保證足夠穩(wěn)定性的前提下,盡可能地提高自身的處理能力。也就是說,在性能和功能方面,MySQL第一考慮的要素主要還是性能,MySQL希望能夠在滿足客戶99%的需求的前提下,將剩余的所有精力都用來努力提高系統(tǒng)性能,而不希望自己是一個比其他任何數(shù)據(jù)庫的功能都要強大的產(chǎn)品。

總體來說,MySQL數(shù)據(jù)庫在發(fā)展過程中一直追求三項原則:簡單、高效、可靠。

 

二:mysql架構(gòu)組成

 mysql物理文件組成:

1)日志文件:主要包含{錯誤日志、查詢?nèi)罩?、慢查詢?nèi)罩?、事物日志、二進(jìn)制日志}

日志是mysql數(shù)據(jù)庫的重要組成部分。記錄mysql數(shù)據(jù)庫運行期間發(fā)生的變化,如mysql數(shù)據(jù)庫的客戶端連接狀況、sql語句執(zhí)行情況和錯誤信息。當(dāng)數(shù)據(jù)庫遭到損壞時,可以通過日志查看文件記錄的出錯的原因,并且可以通過日志文件進(jìn)行數(shù)據(jù)恢復(fù)。

首先挨個介紹日志的功能:

錯誤日志:Error Log

在mysql數(shù)據(jù)庫中,錯誤日志功能是默認(rèn)開啟的。默認(rèn)情況下,錯誤日志存儲在mysql數(shù)據(jù)庫的數(shù)據(jù)目錄中。錯誤日志文件通常的名稱為hostname.err。其中,hostname表示云服務(wù)器主機名。

錯誤日志所記錄的信息是可以通過log-error和log-warnings來定義的,其中l(wèi)og-error是定義是否啟用錯誤日志的功能和錯誤日志的存儲位置,log-warnings是定義是否將警告信息也定義至錯誤日志中。記錄的內(nèi)容信息包括:云服務(wù)器啟動和關(guān)閉過程中的信息(未必是錯誤信息,如mysql如何啟動InnoDB的表空間文件的、如何初始化自己的存儲引擎的等等)、云服務(wù)器運行過程中的錯誤信息、事件調(diào)度器運行一個事件時產(chǎn)生的信息、在從云服務(wù)器上啟動云服務(wù)器進(jìn)程時產(chǎn)生的信息

mysql有很多的系統(tǒng)變量可以設(shè)置,系統(tǒng)的變量設(shè)置不同,會導(dǎo)致系統(tǒng)運行狀態(tài)不同

mysql兩組命令:分別查看系統(tǒng)設(shè)置和運行狀態(tài):

1、查看系統(tǒng)設(shè)置: 
SHOW [GLOBAL | SESSION] VARIABLES [like_or_where] 
SHOW VARIABLES:shows the values of MySQL system variables. 

2、運行狀態(tài): 
SHOW [GLOBAL | SESSION] STATUS [like_or_where] 
SHOW STATUS:provides server status information.

那么接下來修改系統(tǒng)配置:在主配置文件中

vi /etc/my.cnf

    例如:log_bin=/usr/local/mysql/data/

查看mysql的版本

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

一般而言,日志級別的定義沒有會話變量都只是在全局級別下進(jìn)行定義

錯誤日志的狀態(tài):

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

log-error定義為錯誤日志文件路徑

log-error-verbosity

The MySQL error log has received some attention in MySQL 5.7, with a new setting called log_error_verbosity.

更改錯誤日志位置可以使用log-error來設(shè)置如下:

在主配置文件中: vi /etc/my.cnf

log-error = /usr/local/mysql/data/mysqld.err

查看mysql的錯誤日志內(nèi)容:

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

在工作中有時候希望將錯誤日志做備份,并且重新記錄,這時候可以使用mysql的flush logs刷新日志進(jìn)行生成新的日志文件。備份文件為.beifen結(jié)尾

刪除錯誤日志:

在mysql5.5.7之前:數(shù)據(jù)庫管理員可以刪除很長時間之前的錯誤日志,以保證mysql云服務(wù)器上的硬盤空間。mysql數(shù)據(jù)庫中,可以使用mysqladmin命令開啟新的錯誤日志。mysqladmin命令的語法如下:mysqladmin –u root –pflush-logs也可以登錄mysql數(shù)據(jù)庫中使用FLUSHLOGS語句來開啟新的錯誤日志。

在mysql5.5.7之后:云服務(wù)器將關(guān)閉此項功能。只能使用重命名原來的錯誤日志文件,手動沖洗日志創(chuàng)建一個新的:方式如下:

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

更多信息請查閱官方文檔:http://dev.mysql.com/doc/refman/5.5/en/error-log.html

http://dev.mysql.com/doc/refman/5.6/en/error-log.html

http://dev.mysql.com/doc/refman/5.7/en/error-log.html

二進(jìn)制日志:Binary Log & Binary Log Index

二進(jìn)制日志,俗稱Binary Log,主要用于記錄修改數(shù)據(jù)或有可能引起數(shù)據(jù)改變的mysql語句;并且記錄語句的發(fā)生時間、執(zhí)行時長、操作數(shù)據(jù)。。。。一般情況下大小體積上限為1G

當(dāng)我們通過“l(fā)og-bin=file_name”打開了記錄的功能之后,MySQL 會將所有修改數(shù)據(jù)庫數(shù)據(jù)的query 以二進(jìn)制形式記錄到日志文件中。當(dāng)然,日志中并不僅限于query 語句這么簡單,還包括每一條query 所執(zhí)行的時間,所消耗的資源,以及相關(guān)的事務(wù)信息,所以binlog是事務(wù)安全的。

主:如果log-bin日志不開啟的話那么將無法做mysql主從復(fù)制

和錯誤日志一樣,binlog記錄功能同樣需要“l(fā)og-bin=file_name”參數(shù)的顯式指定才能開啟,如果未指定file_name,則會在數(shù)據(jù)目錄下記錄為mysql-bin.******(*代表0~9 之間的某一個數(shù)字,來表示該日志的序號)。

二進(jìn)制的開啟:

當(dāng)前是關(guān)閉狀態(tài)

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

可以通過直配置文件開啟:

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

之后重啟mysql服務(wù)

再次查看mysql服務(wù)已經(jīng)啟動:

mysql數(shù)據(jù)庫的特性以及參數(shù)性能

binlog還有其他一些附加選項參數(shù):

“max_binlog_size”設(shè)置binlog的最大存儲上限,一般設(shè)置為512M或1G,一般不能超過1G當(dāng)日志達(dá)到該上限時,MySQL 會重新創(chuàng)建一個日志開始繼續(xù)記錄。不過偶爾也有超出該設(shè)置的binlog產(chǎn)生,一般都是因為在即將達(dá)到上限時,產(chǎn)生了一個較大的事務(wù),為了保證事務(wù)安全,MySQL 不會將同一個事務(wù)分開記錄到兩個binlog中。

 

“binlog-do-db=db_name”參數(shù)明確告訴MySQL,需要對某個(db_name)數(shù)據(jù)庫記錄binlog,如果有了“binlog-do-db=db_name”參數(shù)的顯式指定,MySQL 會忽略針對其他數(shù)據(jù)庫執(zhí)行的query,而僅僅記錄針對指定數(shù)據(jù)庫執(zhí)行的query。

 

“binlog-ignore-db=db_name”與“binlog-do-db=db_name”完全相反,它顯式指定忽略某個(db_name)數(shù)據(jù)庫的binlog記錄,當(dāng)指定了這個參數(shù)之后,MySQL 會記錄指定數(shù)據(jù)庫以外所有的數(shù)據(jù)庫的binlog。

 

mysql-bin.index文件(binary log index)的功能是記錄所有Binary Log 的絕對路徑,保證MySQL 各種線程能夠順利的根據(jù)它找到所有需要的Binary Log 文件。

 

binlog_cache_size =32768   #默認(rèn)值32768 binlog_cache_size:一個事務(wù),在沒有提交(uncommitted)的時候,產(chǎn)生的日志,記錄到Cache中;等到事務(wù)提交(committed)需要提交的時候,則把日志持久化到磁盤。一般來說,如果我們的數(shù)據(jù)庫中沒有什么大事務(wù),寫入也不是特別頻繁,2MB~4MB是一個合適的選擇。但是如果我們的數(shù)據(jù)庫大事務(wù)較多,寫入量比較大,可與適當(dāng)調(diào)高binlog_cache_size。

binlog_cache_size :一個事務(wù),在沒有提交(uncommitted)的時候,產(chǎn)生的日志,記錄到Cache中;等到事務(wù)提交(committed)需要提交的時候,則把日志持久化到磁盤。 

接著,binlog_cache_size設(shè)置多大呢?答案是:根據(jù)公司生產(chǎn)的實際情況而定 
設(shè)置太大的話,會比較消耗內(nèi)存資源(Cache本質(zhì)就是內(nèi)存),更加需要注意的是:binlog_cache不是全局的,是按SESSION為單位獨享分配的,也就是說當(dāng)一個線程開始一個事務(wù)的時候,Mysql就會為這個SESSION分配一個binlog_cache (備注:我想之所以以SESSION為單位分配binlog_cache是有道理的,因為不同的mysql請求,產(chǎn)生的binlog數(shù)量不一樣的,批量插入數(shù)據(jù)必然產(chǎn)生大量的binlog,而簡單注冊一個用戶,產(chǎn)生的binlog有限,那么JDBC連接上能否設(shè)置binlog_cache_size呢?)。 
設(shè)置太小的話,如果用戶提交一個“長事務(wù)(long_transaction)”,比如:批量導(dǎo)入數(shù)據(jù)。那么該事務(wù)必然會產(chǎn)生很多binlog,這樣cache可能不夠用(默認(rèn)binlog_cache_size是32K),不夠用的時候mysql會把uncommitted的部分寫入臨時文件(臨時文件cache的效率必然沒有內(nèi)存cache高),等到committed的時候才會寫入正式的持久化日志文件。 

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

概念解釋:

事務(wù)表支持將批處理當(dāng)做一個完整的任務(wù)統(tǒng)一提交或回滾,即對包含在事務(wù)中的多條語句要么全執(zhí)行,要么全部不執(zhí)行
非事務(wù)表則不支持此種操作,批處理中的語句如果遇到錯誤,在錯誤前的語句執(zhí)行成功,之后的則不執(zhí)行。

 

log-bin = mysql-bin#指定binlog的位置,默認(rèn)在數(shù)據(jù)目錄下。

 

binlog-format= {ROW|STATEMENT|MIXED}#指定二進(jìn)制日志的類型,默認(rèn)為MIXED。

概念解釋:mysql復(fù)制主要有三種方式:基于SQL語句的復(fù)制(statement-based replication, SBR),基于行的復(fù)制(row-based replication, RBR),混合模式復(fù)制(mixed-based replication, MBR)。對應(yīng)的,binlog的格式也有三種:STATEMENT,ROW,MIXED。

STATEMENT模式(SBR)

每一條會修改數(shù)據(jù)的sql語句會記錄到binlog中。優(yōu)點是并不需要記錄每一行的數(shù)據(jù)變化,減少了binlog日志量,節(jié)約IO,提高性能。

缺點:

某些情況下會導(dǎo)致master-slave中的數(shù)據(jù)不一致(如sleep()函數(shù),last_insert_id(),以及user-defined functions(udf)等會出現(xiàn)問題)

 

ROW模式(RBR)

不記錄每條sql語句的信息,僅需記錄哪條數(shù)據(jù)被修改了,修改成什么樣了。

缺點:

是會產(chǎn)生大量的日志,讓日志暴漲。

③ MIXED模式(MBR)

以上兩種模式的混合使用,一般的復(fù)制使用STATEMENT模式保存binlog,對于STATEMENT模式無法復(fù)制的操作使用ROW模式保存binlog,MySQL會根據(jù)執(zhí)行的SQL語句選擇日志保存方式。即交替使用行和語句、由mysql云服務(wù)器自行判斷。

其中基于行的定義格式數(shù)據(jù)量會大一些但是可以保證數(shù)據(jù)的精確性

注:在生產(chǎn)環(huán)境下多使用MBR模式,雖然I/O使用增大,但對數(shù)據(jù)安全性比較高

 

sync_binlog = 10#設(shè)定多久同步一次二進(jìn)制日志至磁盤文件中,0表示不同步,任何正數(shù)值都表示對二進(jìn)制每多少次寫操作之后同步一次。當(dāng)autocommit的值為1時,每條語句的執(zhí)行都會引起二進(jìn)制日志同步,否則,每個事務(wù)的提交會引起二進(jìn)制日志同步

 

通過編輯my.cnf中的log-bin選項可以開啟二進(jìn)制日志;形式如下:

log-bin = /usr路徑

其中,DIR參數(shù)指定二進(jìn)制文件的存儲路徑;filename參數(shù)指定二級制文件的文件名,其形式為filename.number,number的形式為000001、000002等。每次重啟mysql服務(wù)或運行mysql> flush logs;都會生成一個新的二進(jìn)制日志文件,這些日志文件的number會不斷地遞增。除了生成上述的文件外還會生成一個名為filename.index的文件。這個文件中存儲所有二進(jìn)制日志文件的清單又稱為二進(jìn)制文件的索引

 

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

 

查看二進(jìn)制日志:

二進(jìn)制日志的定義方式為二進(jìn)制格式;使用此格式可以存儲更多的信息,并且可以使寫入二進(jìn)制日志的效率更高。但是不能直接使用查看命令打開并查看二進(jìn)制日志。

 

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

當(dāng)前使用的二進(jìn)制文件及所處位置

 

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 mysql數(shù)據(jù)庫的特性以及參數(shù)性能

 

查看當(dāng)前二進(jìn)制文件的信息:

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

查看二進(jìn)制日志信息的命令:

語法格式:SHOW BINLOG EVENTS[IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]

#查看所有的二進(jìn)制信息

mysql> show binlog events\G;

#查看指定日志的二進(jìn)制信息

#從指定的事件位置開始

mysql> show binlog events in 'log.000002' from 1215\G;

 

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

由于無法使用cat等方式直接打開并查看二進(jìn)制日志;所以必須使用mysqlbinlog命令。但是當(dāng)正在執(zhí)行mysql讀寫操作時建議不要使用此打開正在使用的二進(jìn)制日志文件;若非要打開可flush logs。mysqlbinlog命令的使用方式:

mysql數(shù)據(jù)庫的特性以及參數(shù)性能

刪除二進(jìn)制日志信息:

二進(jìn)制日志會記錄大量的信息(其中包含一些無用的信息)。如果很長時間不清理二進(jìn)制日志,將會浪費很多的磁盤空間。但是,刪除之后可能導(dǎo)致數(shù)據(jù)庫崩潰時無法進(jìn)行恢復(fù),所以若要刪除二進(jìn)制日志首先將其和數(shù)據(jù)庫備份一份,其中也只能刪除備份前的二進(jìn)制日志,新產(chǎn)生的日志信息不可刪。也不可在關(guān)閉mysql云服務(wù)器之后直接刪除因為這樣可能會給數(shù)據(jù)庫帶來錯誤的。若非要刪除二進(jìn)制日志需要做如下操作:導(dǎo)出備份數(shù)據(jù)庫和二進(jìn)制日志文件進(jìn)行壓縮歸檔存儲。刪除二進(jìn)制文件的方法如下:

方法1:根據(jù)文件或時間點來刪除二進(jìn)制日志:

語法形式:

mysql> PURGE { BINARY | MASTER } LOGS {TO 'log_name' | BEFORE datetime_expr }

其中TO'log_name'表示把這個文件之前的其他文件都刪除掉,也可使用BEFORE datetime_expr指定把哪個時間之前的二進(jìn)制文件刪除了。

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

刪除所有的二進(jìn)制日志(慎用):

使用RESET MASTER語句可以刪除所有的二進(jìn)制日志。該語句的形式如下:

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 


3、事務(wù)日志(或稱redo日志)

事務(wù)日志(InnoDB特有的日志)可以幫助提高事務(wù)的效率。使用事務(wù)日志,存儲引擎在修改表的數(shù)據(jù)時只需要修改其內(nèi)存拷貝,再把修改行為記錄到持久在硬盤上的事務(wù)日志中,而不用每次都將修改的數(shù)據(jù)本身持久到磁盤。事務(wù)日志采用追加的方式,因此寫日志的操作是磁盤上一小塊區(qū)域內(nèi)的順序I/O,而不像隨機I/O需要在磁盤的多個地方移動磁頭,所以采用事務(wù)日志的方式相對來說要快得多。事務(wù)日志持久以后,內(nèi)存中被修改的數(shù)據(jù)在后臺可以慢慢的刷回到磁盤。目前大多數(shù)的存儲引擎都是這樣實現(xiàn)的。

如果數(shù)據(jù)的修改已經(jīng)記錄到事務(wù)日志并持久化,但數(shù)據(jù)本身還沒有寫回磁盤,此時系統(tǒng)崩潰,存儲引擎在重啟時能夠自動恢復(fù)這部分修改的數(shù)據(jù)。具有的恢復(fù)方式則視存儲引擎而定。

一般情況下,mysql會默認(rèn)提供多種存儲引擎,你可以通過下面的查看:
查看你的mysql現(xiàn)在已提供什么存儲引擎:
mysql> show engines;
看你的mysql當(dāng)前默認(rèn)的存儲引擎:
mysql> show variables like '%storage_engine%';
你要看某個表用了什么引擎(在顯示結(jié)果里參數(shù)engine后面的就表示該表當(dāng)前用的存儲引擎):
mysql> show create table 表名;

注:

create table 庫名.表名 engine = innodb;
這樣就可以將表的引擎變更為innodb引擎了。
也可以在創(chuàng)建表之后通過下面語句來變更:
alter table庫名.表名engine =innodb;

 

查看事務(wù)日志的定義:

mysql> show global variables like '%log%';

顯示結(jié)果:

| innodb_flush_log_at_timeout| 1   |

| innodb_flush_log_at_trx_commit  | 1   #在事務(wù)提交時innodb是否同步日志從緩沖區(qū)到文件中,當(dāng)這個值為1(默認(rèn)值)之時,在每個事務(wù)提交時,日志緩沖被寫到日志文件,對日志文件做到磁盤操作的刷新,性能會很差造成大量的磁盤I/O但這種方式最安全;如果設(shè)為2,每次提交事務(wù)都會寫日志,但并不會執(zhí)行刷的操作。每秒定時會刷到日志文件。要注意的是,并不能保證100%每秒一定都會刷到磁盤,這要取決于進(jìn)程的調(diào)度。每次事務(wù)提交的時候?qū)?shù)據(jù)寫入事務(wù)日志,而這里的寫入僅是調(diào)用了文件系統(tǒng)的寫入操作,而文件系統(tǒng)是有 緩存的,所以這個寫入并不能保證數(shù)據(jù)已經(jīng)寫入到物理磁盤。設(shè)置為0,日志緩沖每秒一次地被寫到日志文件,并且對日志文件做到磁盤操作的刷新,但是在一個事務(wù)提交不做任何操作。

注:刷寫的概念

刷寫其實是兩個操作,刷(flush)和寫(write),區(qū)分這兩個概念是很重要的。在大多數(shù)的操作系統(tǒng)中,把Innodb的log buffer(內(nèi)存)寫入日志(調(diào)用系統(tǒng)調(diào)用write),只是簡單的把數(shù)據(jù)移到操作系統(tǒng)緩存中,操作系統(tǒng)緩存同樣指的是內(nèi)存。并沒有實際的持久化數(shù)據(jù)。

所以,通常設(shè)為0和2的時候,在崩潰或斷電的時候會丟失最后一秒的數(shù)據(jù),因為這個時候數(shù)據(jù)只是存在于操作系統(tǒng)緩存。之所以說“通常”,可能會有丟失不只1秒的數(shù)據(jù)的情況,比如說執(zhí)行flush操作的時候阻塞了。

總結(jié)

設(shè)為1當(dāng)然是最安全的,但性能頁是最差的(相對其他兩個參數(shù)而言,但不是不能接受)。如果對數(shù)據(jù)一致性和完整性要求不高,完全可以設(shè)為2,如果只最求性能,例如高并發(fā)寫的日志云服務(wù)器,設(shè)為0來獲得更高性能

            |

| innodb_locks_unsafe_for_binlog| OFF                                      |

| innodb_log_buffer_size| 16777216                                 |

| innodb_log_checksums                    | ON                                       |

| innodb_log_compressed_pages| ON                                       |

| innodb_log_file_size| 50331648  #日志文件大小                            |

| innodb_log_files_in_group| 2 # DB中設(shè)置幾組事務(wù)日志,默認(rèn)是2                                   |

| innodb_log_group_home_dir| ./#定義innodb事務(wù)日志組的位置,此位置設(shè)置默認(rèn)為MySQL的datadir                                      |

每個事務(wù)日志都是大小為50兆的文件(不同版本的mysql有差異):

在mysql中默認(rèn)以ib_logfile0,ib_logfile1名稱存在

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

4、慢查詢?nèi)罩荆簊low query log

顧名思義,慢查詢?nèi)罩局杏涗浀氖菆?zhí)行時間較長的query,也就是我們常說的slowquery。

慢查詢?nèi)罩静捎玫氖呛唵蔚奈谋靖袷?,可以通過各種文本編輯器查看其中的內(nèi)容。其中

記錄了語句執(zhí)行的時刻,執(zhí)行所消耗的時間,執(zhí)行用戶,連接主機等相關(guān)信息。

慢查詢?nèi)罩镜淖饔茫?/p>

慢查詢?nèi)罩臼怯脕碛涗泩?zhí)行時間超過指定時間的查詢語句。通過慢查詢?nèi)罩?,可以查找出哪些查詢語句的執(zhí)行效率很低,以便進(jìn)行優(yōu)化。一般建議開啟,它對云服務(wù)器性能的影響微乎其微,但是可以記錄mysql云服務(wù)器上執(zhí)行了很長時間的查詢語句??梢詭椭覀兌ㄎ恍阅軉栴}的。MySQL 還提供了專門用來分析滿查詢?nèi)罩镜墓ぞ叱绦騧ysqldumpslow,用來幫助數(shù)據(jù)庫管理人員解決可能存在的性能問題。

查看慢查詢?nèi)罩镜亩x:

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

\啟動和設(shè)置慢查詢?nèi)罩荆?/p>

方法1:通過配置文件my.cnf開啟慢查詢?nèi)罩荆?/p>

注:在不同的mysql版本中,開啟慢查詢?nèi)罩緟?shù)不太一樣,不過都可以通過 show variables like "%slow%" 和show variables like "%long%"查看出來。

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

其中:

slow_query_log: off關(guān)閉狀態(tài) (0) on開啟狀態(tài)(1)
slow_query_log_file  慢查詢?nèi)罩敬娣诺攸c

long_query_time選項來設(shè)置一個時間值,時間以秒為單位,可以精確到微秒。如果查詢時間超過了這個時間值(默認(rèn)為10秒),這個查詢語句將被記錄到慢查詢?nèi)罩局?設(shè)置為0的話表示記錄所有的查詢。

注:如果不指定存儲路徑,慢查詢?nèi)罩灸J(rèn)存儲到mysql數(shù)據(jù)庫的數(shù)據(jù)文件下,如果不指定文件名,默認(rèn)文件名為hostname-slow.log

修改my.cnf文件:

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

另外也可以通過mysql直接定義(只不過屬于臨時生效)

mysql>set globalslow_query_log=1;  #開啟慢查詢?nèi)罩?/p>

Query OK, 0 rowsaffected (0.35 sec)

mysql>setsession long_query_time=0.0001; #更改時間(當(dāng)前session中,退出則重置)

Query OK, 0 rowsaffected (0.00 sec)

mysql>set globallong_query_time=0.0001; #更改時間(全局中,重啟服務(wù)則重置)

mysql> SHOWVARIABLES LIKE 'long%';  #查詢定義時間

查看慢查詢?nèi)罩?/p>

查看文件內(nèi)容命令如cat直接查看慢日志文件

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

數(shù)據(jù)文據(jù)  (在這里主要介紹myisam和innodb的區(qū)別以及功能)

在MySQL 中每一個數(shù)據(jù)庫都會在定義好(或者默認(rèn))的數(shù)據(jù)目錄下存在一個以數(shù)據(jù)庫名字命名的文件夾,用來存放該數(shù)據(jù)庫中各種表數(shù)據(jù)文件。不同的MySQL 存儲引擎有各自不同的數(shù)據(jù)文件。如MyISAM用“.MYD”作為擴展名,Innodb用“.ibd” 

如何查看你的mysql現(xiàn)在已提供什么存儲引擎:
mysql> show engines;
看你的mysql當(dāng)前默認(rèn)的存儲引擎:
mysql> show variables like '%storage_engine%';

mysql數(shù)據(jù)庫的特性以及參數(shù)性能

你要看某個表用了什么引擎(在顯示結(jié)果里參數(shù)engine后面的就表示該表當(dāng)前用的存儲引擎):
mysql> show create table 表名;

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

另外換可以在創(chuàng)建表的時候在表名的后面跟engine=innodb 可以改變表的引擎

create table 庫名.表名 engine = innodb

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

可以在文件目錄當(dāng)中查看創(chuàng)建的文件格式

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

查看mysql存儲引擎命令,在mysql>提示符下搞入show engines;字段 Support為:Default表示默認(rèn)存儲引擎  

mysql數(shù)據(jù)庫的特性以及參數(shù)性能2、設(shè)置InnoDB為默認(rèn)引擎:在配置文件my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB 一句
3、重啟mysql云服務(wù)器:service mysqld restart 登錄mysql數(shù)據(jù)庫,

1、“.frm”

主要存放表的數(shù)據(jù);包括定義表結(jié)構(gòu)信息,另外在每個表當(dāng)中都會有一個以表命名的.frm的文件,所有的文件存放在此文件夾下面

MyISAM數(shù)據(jù)庫表文件:.MYD文件:表數(shù)據(jù)文件;.MYI文件:索引文件

2、“.MYD”文件

myisam專門存放存儲引擎的專用文件

3、“.MYI”文件

“.MYI”文件也是專屬于MyISAM存儲引擎的,主要存放MyISAM表的索引相關(guān)信息。

 

InnoDB采用表空間(tablespace)來管理數(shù)據(jù),存儲表數(shù)據(jù)和索引。

.ibd文件:單表表空間文件,每個表使用一個表空間文件(file per table),存放用戶數(shù)據(jù)庫表數(shù)據(jù)和索引。

 

InnoDB共享表空間(即InnoDB文件集,ib-file set):ibdata1、ibdata2等,存儲InnoDB系統(tǒng)信息和用戶數(shù)據(jù)庫表數(shù)據(jù)和索引,所有表共用。

.idb和ibdata的區(qū)別:

.id兩者之間的優(yōu)缺點

共享表空間:
優(yōu)點:
可以放表空間分成多個文件存放到各個磁盤上。數(shù)據(jù)和文件放在一起方便管理。
缺點:
所有的數(shù)據(jù)和索引存放到一個文件中,多個表及索引在表空間中混合存儲,這樣對于一個表做了大量刪除操作后表空間中將會有大量的空隙,特別是對于統(tǒng)計分析,日值系統(tǒng)這類應(yīng)用最不適合用共享表空間。

獨立表空間:

優(yōu)點:
1.每個表都有自已獨立的表空間。
2.每個表的數(shù)據(jù)和索引都會存在自已的表空間中。
3.可以實現(xiàn)單表在不同的數(shù)據(jù)庫中移動。
4.空間可以回收
b只能存放單獨的文件數(shù)據(jù),ibdata可以存放多的數(shù)據(jù)相當(dāng)一個共享文件夾

查看當(dāng)前的數(shù)據(jù)庫的表空間:

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

on代表獨立表空間;off代表共享表空間

那么修改下主配置文件來開啟共享表空間

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

可以先 du -h ibdata1 查看下

mysql數(shù)據(jù)庫的特性以及參數(shù)性能


登錄mysql執(zhí)行mysql> show variables like '%innodb_file_per_table%';

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

這時新建的表就會使用共享表空間了。

創(chuàng)建一個數(shù)據(jù)庫testdb并新建一個表

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

 

drop procedure  if exists test;  =====> 刪除之前存在的文件

create  procedure  test() ========> 創(chuàng)建test文件

begin  ================>開始

declare i int;=========>  通告i的類型

set  i=1  ======>  i的數(shù)值等于1

while  i < 100000 do =====> i的值如果小于100000

insert  into  lxf.ttt(id) values (i); =======>插入數(shù)據(jù)變量為i

set i = i +1 ========>  每執(zhí)行一次之后i的值加1直到為99999

end while ======>循環(huán)結(jié)束

end &&結(jié)束

調(diào)用存儲過程:

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

查看標(biāo)的行數(shù)

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

查看表在表空間占用情況:

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

Replication相關(guān)文件:

1)master.info 文件:

master.info 文件存在于Slave 端的數(shù)據(jù)目錄下,里面存放了該Slave 的Master 端的相關(guān)信息,包括Master 的主機地址,連接用戶,連接密碼,連接端口,當(dāng)前日志位置,已經(jīng)讀取到的日志位置等信息。

 

2)relay log 和relay log index

mysql-relay-bin.xxxxxn文件用于存放Slave 端的I/O 線程從Master 端所讀取到的Binary Log 信息,然后由Slave 端的SQL 線程從該relay log 中讀取并解析相應(yīng)的日志信息,轉(zhuǎn)化成Master 所執(zhí)行的SQL 語句,然后在Slave 端應(yīng)用。

mysql-relay-bin.index文件的功能類似于mysql-bin.index,同樣是記錄日志的存放位置的絕對路徑,只不過他所記錄的不是Binary Log,而是Relay Log。

3)relay-log.info 文件:

類似于master.info,它存放通過Slave 的I/O 線程寫入到本地的relay log 的相關(guān)信

息。供Slave 端的SQL 線程以及某些管理操作隨時能夠獲取當(dāng)前復(fù)制的相關(guān)信息。

 

其他文件:

1)system config file

MySQL 的系統(tǒng)配置文件一般都是my.cnf,默認(rèn)存放在"/etc"目錄下,my.cnf文件中包含多種參數(shù)選項組(group),每一種參數(shù)組都通過中括號給定了固定的組名,如“[mysqld]”組中包括了mysqld服務(wù)啟動時候的初始化參數(shù),“[client]”組中包含著客戶端工具程序可以讀取的參數(shù)。

2)pid file

pid file 是mysqld應(yīng)用程序環(huán)境下的一個進(jìn)程文件存放自己的pid號

3)socket file

socket 文件也是在Unix/Linux 環(huán)境下才有的,用戶在Unix/Linux 環(huán)境下客戶端連接可以不通過TCP/IP 網(wǎng)絡(luò)而直接使用Unix Socket 來連接MySQL。

mysql有兩種連接方式,常用的一般是tcp
mysql–hmysql主機ip -uroot -pxxx(可以遠(yuǎn)程連接,但是速度稍慢)
mysql-S /path/mysql.sock (只能試用與本地連接,但速度快)

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

mysql數(shù)據(jù)庫的特性以及參數(shù)性能 

以上關(guān)于mysql數(shù)據(jù)庫的特性以及參數(shù)性能詳細(xì)內(nèi)容,對大家有幫助嗎?如果想要了解更多相關(guān),可以繼續(xù)關(guān)注我們的行業(yè)資訊板塊。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI