MySQL是一種開放原始碼的關係型資料庫管理系統(RDBMS),使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。
MySQL是開放原始碼的,因此任何人都可以在General Public License的許可下下載並根據個人化的需要對其進行修改。
MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。
推薦教學:mysql入門影片教學
MySQL簡介
# MySQL是一種開放原始碼的關係型資料庫管理系統(RDBMS),MySQL資料庫系統使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。
由於MySQL是開放原始碼的,因此任何人都可以在General Public License的許可下下載並根據個人化的需要對其進行修改。 MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。
MySQL這個名字,起源不是很明確。一個比較有影響的說法是,基本指南和大量的庫和工具帶有前綴“my”已經有10年以上,而且不管怎樣,MySQL AB創始人之一的Monty Widenius的女兒也叫My。這兩個到底是哪一個給了MySQL這個名字至今依然是個迷,包括開發者在內也不知道。
MySQL的海豚標誌的名字叫“sakila”,它是由MySQL AB的創始人從用戶在“海豚命名”的競賽中建議的大量的名字表中選出的。獲勝的名字是由來自非洲史瓦濟蘭的開源軟體開發者Ambrose Twebaze提供。根據Ambrose所說,Sakila來自一種叫做SiSwati的史瓦濟蘭方言,也是Ambrose的家鄉烏幹達附近的坦尚尼亞的Arusha的一個小鎮的名字。
MySQL,雖然功能未必很強大,但因為它的開源、廣泛傳播,導致很多人都了解到這個資料庫。它的歷史也富有傳奇性。
資料庫最佳化
#選擇InnoDB作為儲存引擎
大型產品的資料庫對於可靠性和並發性的要求較高,InnoDB作為預設的MySQL儲存引擎,相對於MyISAM來說是個更佳的選擇。
優化資料庫結構
組織資料庫的schema、表格和欄位以降低I/O的開銷,將相關項保存在一起,並提前規劃,以便隨著資料量的成長,效能可以保持較高的水準。
設計資料表應盡量使其佔用的空間最小化,表的主鍵應盡可能短。 ·對於InnoDB表,主鍵所在的列在每個輔助索引條目中都是可複製的,因此如果有很多輔助索引,那麼一個短的主鍵可以節省大量空間。
只建立你需要改進查詢效能的索引。索引有助於檢索,但是會增加插入和更新操作的執行時間。
InnoDB的ChangeBuffering特性
InnoDB提供了changebuffering的配置,可減少維護輔助索引所需的磁碟I/O。大規模的資料庫可能會遇到大量的表格操作和大量的I/O,以確保輔助索引保持最新。當相關頁面不在緩衝池裡面時,InnoDB的changebuffer將會更改快取到輔助索引條目,從而避免因無法立即從磁碟讀取頁面而導致耗時的I/O操作。當頁面被載入到緩衝池時,緩衝的變更將被合併,更新的頁面之後會刷新到磁碟。這樣做可提高效能,適用於MySQL5.5及更高版本。
InnoDB頁面壓縮
InnoDB支援對資料表進行頁面層級的壓縮。當寫入資料頁的時候,會有特定的壓縮演算法對其進行壓縮。壓縮後的資料會寫入磁碟,其打孔機制會釋放頁面末端的空區塊。如果壓縮失敗,資料會按原樣寫入。表和索引都會被壓縮,因為索引通常是資料庫總大小中佔比很大的一部分,壓縮可以顯著節約內存,I/O或處理時間,這樣就達到了提高性能和伸縮性的目的。它還可以減少記憶體和磁碟之間傳輸的資料量。 MySQL5.1及更高版本支援此功能。
注意,頁面壓縮並不能支援共用表空間中的資料表。共享表空間包括系統表空間、臨時表空間和常規表空間。
使用批次資料匯入
#在主键上使用已排序的数据源进行批量数据的导入可加快数据插入的过程。否则,可能需要在其他行之间插入行以维护排序,这会导致磁盘I/O变高,进而影响性能,增加页的拆分。关闭自动提交的模式也是有好处的,因为它会为每个插入执行日志刷新到磁盘。在批量插入期间临时转移唯一键和外键检查也可显著降低磁盘I/O。对于新建的表,最好的做法是在批量导入后创建外键/唯一键约束。
一旦你的数据达到稳定的大小,或者增长的表增加了几十或几百兆字节,就应该考虑使用OPTIMIZETABLE语句重新组织表并压缩浪费的空间。对重新组织后的表进行全表扫描所需要的I/O会更少。
优化InnoDB磁盘I/O
增加InnoDB缓冲池大小可以让查询从缓冲池访问而不是通过磁盘I/O访问。通过调整系统变量innodb_flush_method来调整清除缓冲的指标使其达到最佳水平。
MySQL的内存分配
在为MySQL分配足够的内存之前,请考虑不同领域对MySQL的内存需求。要考虑的关键领域是:并发连接——对于大量并发连接,排序和临时表将需要大量内存。在撰写本文时,对于处理3000 并发连接的数据库,16GB到32GB的RAM是足够的。
内存碎片可以消耗大约10%或更多的内存。像innodb_buffer_pool_size、key_buffer_size、query_cache_size等缓存和缓冲区要消耗大约80%的已分配内存。
日常维护
定期检查慢的查询日志并优化查询机制以有效使用缓存来减少磁盘I/O。优化它们,以扫描最少的行数,而不是进行全表扫描。
其他可以帮助DBA检查和分析性能的日志包括:错误日志、常规查询日志、二进制日志、DDL日志(元数据日志)。
定期刷新缓存和缓冲区以降低碎片化。使用OPTIMIZETABLE语句重新组织表并压缩任何可能被浪费的空间。 [1]
以上是MySQL是什麼東西的詳細內容。更多資訊請關注PHP中文網其他相關文章!