原文地址:http://www.cnblogs.com/demon89/p/8490229.html
MySQL常用存儲引擎之MyISAM
特性:1、并發性與鎖級別2、表損壞修復check table tablenamerepair table tablename3、MyISAM表支持的索引類型①、全文索引②、前綴索引4、MyISAM表支持數據壓縮myisampack
限制:版本 < MySQL5.0時默認表大小為4G如存儲達標則要修改MAX_Rows和AVG_ROW_LENGTH版本 > MySQL5.0時默認支持為256TB適用場景:1、非事務形應用2、只讀類應用3、空間類應用
MySQL常用存儲引擎之Innodb
Innodb存儲引擎的特征1、Innodb是一種事務性存儲引擎2、完全支持事務的ACID特性3、Redo Log 和 Undo Log4、Innodb支持行級鎖Innodb使用表空間進行 數據存儲為每個表獨立創建一個表空間存儲innodb_file_per_tableON:獨立表空間:tablename.ibdOFF:系統表空間:ibdataX(X是個數字,從1開始的數字)系統表空間和獨立表空間要如何選擇比較:系統表空間無法撿的收縮文件大小獨立表空格鍵可以通過optimize table命令收縮系統文件系統表空間會產生IO瓶頸獨立表空間可以同時向多個文件刷新數據表轉移的步驟步驟:1、使用mysqldump到處所有數據庫表數據2、停止MySQL服務,修改參數,并刪除Innodb相關文件3、重啟MySQL服務,重建Innodb系統表空間4、重新導入數據
MySQL常見的存儲引擎之CSV
文件系統存儲特點1、數據以文本方式存儲在文本中2、.csv文件存儲表內容3、.csm文件存儲表的元數據如表狀態和數據量4、.frm文件存儲表結構信息5、以csv格式進行存儲6、所有列必須都是不能為Null的7、不支持索引適用場景:適用作為數據交換的中間表(電子表格->csv文件->MySQL數據庫目錄)
MySQL常用存儲引擎之Archive
文件系統存儲特點1、以zlib對表數據進行壓縮,磁盤I/O更少2、數據存儲在ARZ為后綴的文件中Archive存儲引擎的特點1、只支持insert和select操作2、只允許在自增的ID列上加索引適用場景:日志和數據采集類應用
MySQL常用存儲引擎之Memory
文件系統存儲特點1、也成HEAP存儲引擎,所以數據保存在內存中功能特點:1、支持HASH索引和Btree索引2、所有字段都有固定長度varchar(10)=char(10)3、不支持BLOG和TEXT等大字段4、Memory存儲引擎使用表級鎖5、最大大小由max_heap_table_size參數決定適用場景:1、用于查找或者是映射表,例如郵編和地區的對應表2、用于保存數據分心中產生的中間表3、用于緩存周期性聚合數據的結果表
MySQL常用存儲引擎之Federated
特點:1、提供了訪問遠程MySQL服務器上表的方法2、本地不存儲數據,數據全部放到遠程服務器上3、本地需要保存表結構和遠程服務器的連接信息如何使用默認靜止,啟用需要在啟動時增加federated參數mysql://user_name[:password]@host_name[:port]/db_name/table_name適用場景:偶爾的統計分析及手工查詢
如何選擇正確的存儲引擎
參考條件1、是否要支持事務2、定期備份3、崩潰恢復4、存儲引擎的特有特性
Mysql的服務器參數介紹
MySQL獲取配置信息路徑1、命令行參數mysqld_safe --datadir=/data/sql_data2、配置文件查看配置文件的命令:[root@localhost ~]# mysqld --help --verbose | egrep -A 1 'Default options'配置文件的有效路徑/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnfMySQL配置參數的作用域1、全局參數set global 參數名=參數值;set @@global.參數名:=參數值;2、會話參數 set [session] 參數名=參數值;set @@session.參數名:=參數值;內存配置相關參數1、確定可以使用的內存的上限2、確定MySQL的每個連接使用的內存sort_buffer_sizejoin_buffer_sizeread_buffer_sizeread_rnd_buffer_size3、確定需要為操作系統保留多少內存4、如何為緩存池分配內存Innodb_buffer_pool_size注:設置緩存池的大小的考量標準為:總內存-(每個編程所以需要的內存*連接數)-系統保留內存key_buffer_sizeselect sum(index_length) from information_schema.tables where engines='myisam'I/O相關配置參數Innodo I/O相關配置Innodb_log_file_size 單個事務日志的大小Innodb_log_files_in_group 控制文件日子的個數事務日志總大小 = Innodb_log_files_in_group * Innodb_log_file_sizeInnodb_log_buffer_size = (32M or 128M)Innodb_flush_log_at_trx_commint0:每秒進行一次log寫入cache,并flush log到磁盤1[默認]:在每次事務提交執行log寫入cache,并flush log到磁盤2[建議]:每次事務提交,執行log數據寫入到cache中,每秒執行一次flush log到磁盤Innodb_flush_method=O_DIRECTInnodb_file_per_table = 1Innodb_doublewrite = 1MyISAM I/O相關配置delay_key_writeOFF:每次寫操作后刷新鍵緩沖中的臟塊到磁盤ON:只對在鍵表時指定了delay_key_write選項的表使用延遲刷新ALL:對所有的MyISAM表都使用延遲建寫入安全相關配置參數expire_logs_days 指定自動清理binlog的天數max_allowed_packet 控制MySQL可以連接的包大小,建議設置為32M,如果使用了主從復制,參數應該設置成一致的skip_name_resolve 禁用DNS查找sysdate_is_now 確保sysdate()返回確保性日期read_only 禁止非super權限的用戶寫操作 注:建議在主從復制中的從庫開啟此功能。以確保不能修改從庫中的操作,只能從主庫同步過來skip_slave_start 禁用Salve自動恢復(從庫中的設置使用)sql_mode 設置MySQL所使用的SQL模式 (謹慎操作,可能會造成MySQL無法執行)① strict_trans_tables 給定的數據如果不能插入到數據庫中,對事務引擎會終端操作,對非事務引擎是沒有影響的② no_engine_subitiution 在create table中指定engines的時候,如果引擎不可用,不會使用默認引擎建立表③ no_zero_date 不能再表中插入0年0月0日的日期④ no_zero_in_date 不接受一部分的為0的日期⑤ noly_full_group_by 其他常用的配置參數sync_binlog 控制MySQL如何向磁盤刷新binlogtmp_table_size 和 max_heap_table_size 控制內存臨時表大小(不宜設置的太大,以避免內存的溢出)max_connections 控制允許的最大連接數(默認為100,有點小,根據自己的業務適當的調整大小)
什么影響了性能
數據庫設計對性能的影響1、過分的反范式化為表建立太多的列2、過分的范式化造成太多的表關聯(關聯的表盡可能的控制在10個之內)3、在OLTP環境中使用不恰當的分區表4、使用外鍵保證數據的完整性
總結
性能優化的順序1、數據庫結構設計和SQL語句2、數據庫存儲引擎的選擇參數配置3、系統選擇及優化4、硬件升級