這篇文章給大家介紹準入規范有哪些,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
1、表結構設計
-表中的自增列(auto_increment屬性)推薦使用bigint類(lèi)型 -首選使用非空的唯一鍵, 其次選擇自增列或發(fā)號器 不使用更新頻繁的列,盡量不選擇字符串列,不使用UUID MD5 HASH -業(yè)務(wù)中選擇性很少的狀態(tài)status、類(lèi)型type等字段推薦使用tinytint或者smallint類(lèi)型 -業(yè)務(wù)中IP地址字段推薦使用int類(lèi)型 -業(yè)務(wù)活躍的大表中必須有行數據的創(chuàng )建時(shí)間字段create_time和最后更新時(shí)間字段update_time -表中所有字段必須都是NOT NULL屬性,業(yè)務(wù)可以根據需要定義DEFAULT值 -用decimal存儲精確浮點(diǎn)數(不要用浮點(diǎn)類(lèi)型) -不推薦使用enum,set,blob,text等類(lèi)型,對于大表必須將text、blob等類(lèi)型字段拆分或者獨立建表
2、索引設計
-避免冗余索引 :避免將同一個(gè)字段都建立索引,索引的建立需要根據訪(fǎng)問(wèn)的SQL語(yǔ)句來(lái)評估 -一次查詢(xún),一個(gè)表只能用到一個(gè)索引,不要對每個(gè)查詢(xún)條件的字段都單獨建立索引 -單張表索引數量不超過(guò)7,單個(gè)索引字段數不超過(guò)5 -不在null列上加索引 -不在低基數列上建立索引,例如“性別” -復合索引字段排序,區分度最大的字段放在前面 -核心SQL優(yōu)先考慮覆蓋索引 -對字符串使用前綴索引 -前綴長(cháng)度不超過(guò)8個(gè)字符 ,必須是最左前綴
3、字符集及校驗集
-數據庫和表的字符集必須一致,且所有表的字符集必須一致,只能是utf8;數據庫中所有表采用統一的校驗集 -主、從數據庫的字符集必須一致 -前端程序字符集或者環(huán)境變量中的字符集,與數據庫、表的字符集必須一致
4、其他要求
-不推薦使用外鍵,臨時(shí)表,視圖,自定義函數,存儲過(guò)程以及觸發(fā)器 -SSD硬盤(pán)上,單表數據行數不能超過(guò)5000萬(wàn)或者存儲空間不得大于30GB -SAS硬盤(pán)上,單表數據行數不能超過(guò)2000萬(wàn)或者存儲空間不得大于15GB -上線(xiàn)前DBA必須根據1年內的業(yè)務(wù)訪(fǎng)問(wèn)量和數據增長(cháng)量,給出庫、表的擴展方案
二、SQL編寫(xiě)
1、select
-SELECT語(yǔ)句必須指定具體字段名稱(chēng),禁止寫(xiě)成“select *” -SELECT語(yǔ)句禁止使用UNION,推薦使用UNION ALL,并且UNION子句個(gè)數限制在5個(gè)以?xún)?/pre>2、DML
-INSERT語(yǔ)句必須指定具體的字段名稱(chēng),不要寫(xiě)成INSERT VALUES(……)形式 -SQL語(yǔ)句在程序中傳入的參數值類(lèi)型必須與字段在數據庫中的類(lèi)型相同3、多表聯(lián)合查詢(xún)
-多表連接查詢(xún)推薦使用別名,且SELECT列表中要用別名引用字段,數據庫.表格式,如“select a.cid from iknow_qb. tblreply a where …” -生產(chǎn)系統中,單個(gè)查詢(xún)中不推薦將3張表以上(包括3張表)做連接 -生產(chǎn)系統中,強烈不推薦使用外關(guān)聯(lián),包括左外關(guān)聯(lián),右外關(guān)聯(lián)和全外關(guān)聯(lián) -在多表連接的查詢(xún)中,驅動(dòng)表須要選擇結果集較小的表 -禁止寫(xiě)成多層子查詢(xún)嵌套的SQL語(yǔ)句,推薦改寫(xiě)成表順序連接的格式 -盡量不要在INSERT|UPDATE|DELETE|REPLACE語(yǔ)句中進(jìn)行多表連接操作4、事務(wù)
-事務(wù)中INSERT|UPDATE|DELETE|REPLACE語(yǔ)句操作的行數控制在2000,以及WHERE子句中IN列表的傳參個(gè)數控制在2000 -批量操作數據時(shí),需要控制事務(wù)處理間隔時(shí)間,進(jìn)行必要的sleep,具體值由DBA給出,并且程序必須有中斷處理能力 -對于有auto_increment屬性字段的表的插入操作,并發(fā)需要控制在200/s以?xún)? -SQL級別/事務(wù)級別/主從數據庫中的表存儲引擎類(lèi)型要一致,存儲引擎混合使用會(huì )導致主從數據不一致或主從同步中斷 -對于同步延遲不敏感的只讀查詢(xún),必須放到從庫上執行;對于同步延遲敏感的只讀查詢(xún),可以放到主庫上執行 -前端程序中盡量不要使用set語(yǔ)句,包括set names、set sql_mode和set isolation_level等5、表掃描方式:
-SELECT|UPDATE|DELETE|REPLACE要有WHERE子句,且WHERE子句的條件必需使用索引查找 -生產(chǎn)數據庫中強烈不推薦大表上發(fā)生全表掃描,但對于5000行以下的靜態(tài)表可以全表掃描 -業(yè)務(wù)中大表全表掃描和全表導出(dump)推薦放在備份庫或者線(xiàn)下讀庫中進(jìn)行 -WHERE 子句中禁止只使用全模糊的LIKE條件進(jìn)行查找(如like '%aj%'),必須有其他查詢(xún)條件 -WHERE子句中的索引列或組合索引前導列上不能使用函數6、排序和分組
-有distinct、order by和group by子句的查詢(xún),中間結果集限制10000行以?xún)? -對于大結果集(中間結果集超過(guò)10000行)的排序、分組放到程序端實(shí)現7、其他要求
-單個(gè)SQL語(yǔ)句的大小限制在5MB以?xún)? -生產(chǎn)數據庫中SQL語(yǔ)句的中間結果集和最終結果集必須限制在5MB以?xún)? -生產(chǎn)數據庫中SQL語(yǔ)句禁止使用提示,如force index,ignore index,straight_join,sql_no_cache等 -禁止使用全文檢索功能 -禁止使用事件(EVENT)功能 -程序中不要使用或操作mysql庫和test庫,禁止創(chuàng )建test或以test開(kāi)頭的庫 -禁止在mysql中使用用戶(hù)自定義變量 -線(xiàn)上數據庫中不要進(jìn)行業(yè)務(wù)的實(shí)時(shí)統計或者匯總等計算操作,可導出后利用其它工具或者在線(xiàn)下備份庫中完成 -減少與數據庫的交互次數 INSERT ... ON DUPLICATE KEY UPDATE REPLACE INTO、INSERT IGNORE 、INSERT INTO VALUES(),(),() UPDATE … WHERE ID IN(A,B,C,…) -不使用負向查詢(xún),例如 not in,!= ,not like -不在索引列進(jìn)行數學(xué)運算和函數運算 -不使用%前導的查詢(xún),例如like “%abc” -避免大表數據類(lèi)型間的隱式轉換(這個(gè)經(jīng)常出性能問(wèn)題)會(huì )導致索引失效,例如數字轉字符串
三、MySQL相關(guān)特點(diǎn)介紹
1、MySQL對SQL的處理特點(diǎn)-SQL請求處理只能使用一個(gè)核 -沒(méi)有SQL編譯緩存,SQL存儲過(guò)程都是硬解析 -索引上不支持運算對比 -大多情況下一個(gè)Query只能使用一個(gè)索引 -不支持Hash jion(MariaDB目前支持) -基于線(xiàn)程的對外服務(wù)模型(連接數太高,性能下降嚴重) -子查詢(xún)支持較差,外層查詢(xún)一般走不了索引2、MySQL支持的存儲大小
-單個(gè)表空間64T, 每個(gè)表只有一個(gè)表空間,也就是每個(gè)單表最大64T -Innodb Logfile 加起來(lái)不能超過(guò)512G -每行大小限制65535 byte -每個(gè)表最多1027個(gè)字段 -每個(gè)表最多64個(gè)普通索引3、MySQL生產(chǎn)參考指標
-單實(shí)例最好不要超過(guò)1T, 周邊LOG除外,最大不建議超過(guò)5T -一般的OLTP單表建議最大不要超過(guò)10G -通常在有buffer命中的情況下: Select 可以達到3-6W/S Insert 在聚集索引連續的情況可以到2w-3W/S 在聚集索引不連續的情況下有可能也就是200-300/S UPDATE數據在內存的情況下可以達到3K/S DELETE數據在內存的情況下可以達到1k/s,有可能更少 -數據庫的瓶頸: IO能力 ,想辦法用順序IO,減少隨機IO
四、建表審核
建庫或者建表,需要提前找DBA評估建表語(yǔ)句,并填寫(xiě)表及SQL審核模板:SQL審核模板.doc
五、容量評估
1、容量評估概述
所有的數據庫上線(xiàn):新建集群、新建數據庫、新建表,都需要提前進(jìn)行容量評估,防止后續因容量問(wèn)題而又對已上線(xiàn)的業(yè)務(wù)進(jìn)行調整、擴容、遷移等操作,從而對線(xiàn)上業(yè)務(wù)造成影響。容量包括:訪(fǎng)問(wèn)量(讀寫(xiě))、數據及增長(cháng)量、磁盤(pán)空間容量.2、表容量
表容量主要從表的 記錄數、平均長(cháng)度、增長(cháng)量、讀寫(xiě)量、總大小量進(jìn)行評估。一般對于OLTP的表,建議單表不要超過(guò)2000W行數據量,總大小15G以?xún)?。訪(fǎng)問(wèn)量:?jiǎn)伪碜x寫(xiě)量在1600/s以?xún)取?br/> 對于單表數據量上百萬(wàn)的表,每行記錄長(cháng)度不要過(guò)長(cháng),不要和text、blob等字段類(lèi)型放在同一個(gè)表中。(MySQL數據頁(yè)大小為16K,每行記錄越長(cháng),每個(gè)數據頁(yè)存儲的記錄數就越少,因此在對數據進(jìn)行檢索時(shí),會(huì )產(chǎn)生更多的IO)3、實(shí)例容量
MySQL是基于線(xiàn)程的服務(wù)模型,因此在一些并發(fā)較高的場(chǎng)景下,單實(shí)例并不能充分利用的CPU資源,吞吐量反而會(huì )卡在mysql層,特別是對于mysql5.5版本。在mysql 5.6版本中 做了很大優(yōu)化,而且percona 版本有thread pool ,可以充分應對高并發(fā)場(chǎng)景下CPU上下文切換消耗過(guò)高的問(wèn)題。
單實(shí)例QPS吞吐量一般控制在20000/s以?xún)?,?xiě)入量還需考慮從庫延遲問(wèn)題,對于mysql5.6版本可以考慮進(jìn)行分庫后再分表,充分利用5.6版本基于庫級別的多線(xiàn)程復制,從而提高寫(xiě)入的吞吐量。4、磁盤(pán)空間
服務(wù)器一般會(huì )承載多個(gè)數據庫實(shí)例,因此在各個(gè)實(shí)例上線(xiàn)前,需要對各個(gè)實(shí)例進(jìn)行 數據量的評估,以及1-2年內 主要的幾個(gè)大表的增長(cháng)量情況,對數據量的評估,盡量精確到每個(gè)字段。對于增長(cháng)量不是特別快的業(yè)務(wù)(半年就翻倍的情況),建議1-2年的數據量,最終占磁盤(pán)使用率的70%以?xún)?。同時(shí),對于一些數據增長(cháng)較快,可以考慮使用大的慢盤(pán)進(jìn)行數據歸檔。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站