Database 效能優化主意事項

2021-10-05 11:31:27 字數 3377 閱讀 2633

1. 查詢執行慢的sql

mysql查詢當前執行的sql

select

*from information schema

.processlist where info is

notnull

;

time列是sql持續的時間,單位是秒,越少越好,至少會有一條記錄,就是當前的監控sql。

mysql查詢未提交事務中的歷史sql

select

ps.id 'process id'

, ps.

user

, ps. host,

esh.event_id,

trx.trx_started,

esh.event_name 'event name'

, esh.sql_text 'sql'

, ps.

time

from

performance_schema.events_statements_history esh

join performance_schema.threads th on esh.thread_id = th.thread_id

join information_schema.processlist ps on ps.id = th.processlist_id

left

join information_schema.innodb_trx trx on trx.trx_mysql_thread_id = ps.id

where

ps.time

>

60and trx.trx_id is

notnull

and ps.

user

!='system_user'

order

by esh.event_id;

當發現有鎖長期存在,影響別的事務,就需要本指令碼

sqlserver查詢執行過的sql

select

top10

qs.total_worker_time / qs.execution_count /

1000 耗時

,st.

text

as sql_statement

,qs.creation_time as plan_last_compiled

,qs.last_execution_time as plan_last_executed

,qs.execution_count as plan_executed_count

,qp.query_plan

from sys.dm_exec_query_stats qs

cross

cross

order

by plan_last_executed desc

沒有準『實時』的抓取功能,只能是『偽實時』

2. sql 事務、鎖分析

select

*from information_schema.

`processlist`

where info is

notnull

;select

*from information_schema.innodb_trx;

-- 顯示掛起的事務

select

*from information_schema.innodb_lock_waits;

-- 鎖等待

select

*from information_schema.innodb_locks;

-- 正在使用的鎖

select

*from information_schema.innodb_trx;

kill trx_mysql_thread_id;

3. 資料表資訊收集

mysql 單錶資訊收集,表的記錄數,及佔空間情況

select table_schema,table_name,

round

((data_length+index_length)

/1024

/1024

/1024,3

)`size(gb)

`,table_rows from information_schema.

tables

where table_name =

'vote_record'

sqlserver 單錶資訊收集

exec sp_spaceused '表名'
4.效能主意點

a. 使用連線join來代替子查詢

查詢沒有子表資訊的主表記錄

select

*from employee where id notin(

select empid from employeeinfo)

;// 優化

select

*from employee e left

join employeeinfo einfo on e.id = einfo,empid

where einfo.empid is

null;

b. 使用索引的注意點

最好在相同型別的字段間進行比較

在建有所有的字段上盡量不要使用函式操作

select

*from

order

where

year

(orderdate)

<

2001

;select

*from

order

where orderdate <

'2001-01-1'

;

慎用like 「%abc%」 這是以犧牲效能為代價的

索引是可以多欄位

create

index ix_date_emp on t_工作日誌表 (

date

, empid)

;create

index ix_emp_date on t_工作日誌表 (empid,

date);

create

index ix_date on t_工作日誌表 (

date);

create

index ix_emp on t_工作日誌表 (empid)

;

c. 使用冗餘字段

記錄表,例項表等表結構,可以違反3nf,增加冗餘字段,比如保留操作人姓名,部門名稱,訂單總價等等。方便查詢

d. 減少乙個sql中join 的個數

效能優化瑣碎事

對於一張 100 100 畫素的來說,影象上有 10000 個畫素點,如果每個畫素的值是rgba儲存的話,那麼也就是說每個畫素有 4 個通道,每個通道 1 個位元組 8 位 1個位元組 所以該大小大概為 39kb 10000 1 4 1024 但是在實際專案中,一張可能並不需要使用那麼多顏色去顯示,...

app 效能優化的那些事

iphone上面的應用一直都是以流暢的操作體驗而著稱,但是由於之前開發人員把注意力更多的放在開發功能上面,比較少去考慮效能的問題,可能這其中涉及到objective c,c 跟lua,優化起來相對複雜一些,導致應用在比如touch等較低端的產品上,光從啟動到進入頁面就花了將近一分鐘的時間,頁面之間的...

iOS app效能優化的那些事 二

tableview 滑動不流暢 那碰到這種情況該怎麼處理,分析影象動畫效能主要用的是core animation這個元件,先簡單介紹一下裡面一些經常用到的選項 當你碰到效能問題的時候,你可以思考一下 是否受到cpu或者gpu的限制?是否有不必要的cpu渲染?是否有太多的離屏渲染操作?是否有太多的圖層...