正規化和反正規化
正規化和反正規化是庫表設計過程中的概念
目前關聯式資料庫有六種正規化,越高的正規化資料庫冗餘越小
正規化化可以較少冗餘,從而減少了在更新資料時一致性方面的開銷
反正規化化由於冗餘的資料,在複雜的查詢場景下,可以避免聯合查詢和子查詢,提高查詢的效率
根據業務場景,選擇合適的正規化等級進行庫表設計,是日常運維中的第一步
查詢優化
使用索引
多表查詢的型別
多表查詢中的驅動表和被驅動表
情況1: select * from (select id,name from t1 where t1.type=3) as t3, t2 where t2.name = t3.name and t2.age>20;
情況2: select * t1 left join t2 on t1.name=t2.name where t2.age>20 and t1.type=3;
情況3: select * from t1 where t1.tape=3 and t1.name in (select t2.name from t2 where t2.age>20)
上述三種情況中,t1 是驅動表,t2 是被驅動表,查詢的步驟是:
1. 根據篩選條件,獲取 t1 表相關的結果集
2. 使用 t1 中的關聯字段,去遍歷 t2 表
多表查詢的優化原則
可以使用show profile
檢視查詢執行時在每個階段的開銷
可以使用explain
檢視查詢的執行路徑
可以使用hint
強制使用某個索引或者不適用索引
其他優化
使用 truncate 清理所有資料的操作可以用下列操作代替,從而做到「灰度」、「可回滾」
online ddl, 不鎖表的 dd
optimize table 優化表空間
執行狀態
aborted_clients 由於客戶沒有正確關閉連線已經死掉,已經放棄的連線數量。
aborted_connects 嘗試已經失敗的mysql伺服器的連線的次數。
connections 試圖連線mysql伺服器的次數。
created_tmp_tables 當執行語句時,已經被創造了的隱含臨時表的數量。
delayed_insert_threads 正在使用的延遲插入處理器執行緒的數量。
delayed_writes 用insert delayed寫入的行數。
delayed_errors 用insert delayed寫入的發生某些錯誤(可能重複鍵值)的行數。
flush_commands 執行flush命令的次數。
handler_delete 請求從一張表中刪除行的次數。
handler_read_first 請求讀入表中第一行的次數。
handler_read_key 請求數字基於鍵讀行。
handler_read_next 請求讀入基於乙個鍵的一行的次數。
handler_read_rnd 請求讀入基於乙個固定位置的一行的次數。
handler_update 請求更新表中一行的次數。
handler_write 請求向表中插入一行的次數。
key_blocks_used 用於關鍵字快取的塊的數量。
key_read_requests 請求從快取讀入乙個鍵值的次數。
key_reads 從磁碟物理讀入乙個鍵值的次數。
key_write_requests 請求將乙個關鍵字塊寫入快取次數。
key_writes 將乙個鍵值塊物理寫入磁碟的次數。
max_used_connections 同時使用的連線的最大數目。
not_flushed_key_blocks 在鍵快取中已經改變但是還沒被清空到磁碟上的鍵塊。
not_flushed_delayed_rows 在insert delay佇列中等待寫入的行的數量。
open_tables 開啟表的數量。
open_files 開啟檔案的數量。
open_streams 開啟流的數量(主要用於日誌記載)
opened_tables 已經開啟的表的數量。
questions 發往伺服器的查詢的數量。
slow_queries 要花超過long_query_time時間的查詢數量。
threads_connected 當前開啟的連線的數量。
threads_running 不在睡眠的執行緒數量。
uptime 伺服器工作了多少秒。
常用日誌
變更守則
有驗證方案,分批次,灰度發布
發布過程有日誌,可監控
有回滾方案
選擇業務低峰期發布 其他
作業系統時間和資料庫預設時區最好保持一致,否則now()
函式容易發生問題
hbase日常運維
一,基本命令 建表 create testtable coulmn1 coulmn2 也可以建表時加coulmn的屬性如 create testtable 其中的屬性有versions 設定歷史版本數,ttl 過期時間,compression 壓縮方式,當配置lzo的情況 刪除表 drop test...
oracle日常運維
1.解鎖使用者 select username,account status from dba users b where b.username upper alter user account unlock 解鎖 alter user identified by sh 解開expired alte...
日常運維 1
10.1 使用w檢視系統負載 第一行從左到右依次表示當前時間 系統已執行時間 登入使用者數 終端登入顯示為ttyx,遠端登入顯示為pts x 平均負載 每1分鐘 每5分鐘 每15分鐘 主要是注意第乙個負載值,值越大說明伺服器壓力越大。一般情況下,這個值不要超過伺服器的邏輯cpu數量就沒有關係。2 檢...