阿肥的DB學習之路
以SQL SERVER與BI為主,把我學到讀到用到的經驗記錄下來。 若引用文章有侵權請來信告之,謝謝。
2024年3月5日 星期二
2021年8月12日 星期四
學習心得 : 查詢Oracle當前交易處理時間
問題描述
查詢Oracle當前交易處理時間
解決方式
1. 正執行交易指令
SELECT T1.SID,T1.SQL_ID, T1.USERNAME, T2.XIDUSN, T2.USED_UREC, T2.USED_UBLK,T2.START_TIME,SQL_TEXT
FROM V$SESSION T1, V$TRANSACTION T2 , V$SQL T3
WHERE T1.SADDR = T2.SES_ADDR AND T1.SQL_HASH_VALUE=T3.HASH_VALUE;
2. 交易語法執行完成但尚未COMMIT或ROLLBACK
SELECT T1.SID,T1.USERNAME, T2.XIDUSN, T2.USED_UREC, T2.USED_UBLK,T2.START_TIME
FROM V$SESSION T1, V$TRANSACTION T2
WHERE T1.SADDR = T2.SES_ADDR;
此外SQL DEVELOPER的Real-Time SQL Monitoring報表可查詢執行時間超過5秒的SQL指令,不論是否有交易,執行完成或與執行中都會紀錄於V$SQL_MONITOR,並保留一段時間。
2021年7月7日 星期三
經驗分享:如何確認還有SESSION執行交易
問題描述
當Oracle執行DML時,我要怎麼確認交易尚未結束(Commit Or Rollback)
解決方式
1.建立兩個session,並針對資料表執行Insert
2.使用語法查詢交易狀態,查詢到有兩個Session正進行交易
select t1.sid, t1.username, t2.xidusn, t2.used_urec, t2.used_ublk
from v$session t1, v$transaction t2
where t1.saddr = t2.ses_addr;
3.COMMIT再次查詢,已無任何交易
難忘的經驗:建立INDEX後,讓SELECT效能變慢
1.情況說明:
朋友急call,告知我他的系統變得超慢,看了一下IO高的SQL,有大量的IO發生,查看一下執行計畫發現大量使用WorkTable(TempTable)讓效能低落。
2.溝通詢問:
Q1 詢問朋友有沒有修改程式碼?
A1 朋友說沒有
Q2 最近table schema有沒有異動
A2 朋友說沒有
Q3 table schema是除了異動欄位外,包含contact,Index都算
A3 朋友:有,Index我加了Index
3.如何解決:
記得之前看過一篇文章 ,文中有提到建立Index後影響其他語法查詢效能,再次確認這個Index是查詢報表用砍掉對業務沒有影響,就大膽的砍掉該Index,問題就瞬間解決了。
4.問題重現:
- 查詢語法
- 先建立IX_FIRST索引語法
2019年3月30日 星期六
筆記_如何使用SQL Profiler找出死結
2019年1月3日 星期四
筆記_SQL Server交易(Transaction)特性與交易隔離層級(Isolation Level)
Isolation層級
|
Share Locks 行為
|
Table Hint
|
Read uncommitted,
|
不需要Share locks
|
NoLock
|
read committed,
|
Share locks在Commit完後釋放
|
READ committed
|
repeatable read
|
Share locks在交易結束後釋放
|
repeatableread
|
serializable
|
Share Locks的範圍變大(RANGE locks),且直到交易結束才釋放。
|
HOLDLOCK
|
除了Read uncommitted之外,每個Isolation Level在資料寫入時會鎖住(BLOCK)讀取行為。此外不論Isolation Level為何,資料異動時的互斥鎖(exclusive lock)都會在持續到交易結束,所以上述四種Isolation Level的差異主要是在於Share Locks的行為。
Read uncommitted:沒有shared locks,所以當其他還沒有COMMIT交易在修改資料時,其他交易是可以讀取該筆資料的,所以當A交易異動資料且尚未commit時,B交易是可以讀取A交易異動過的資料。
Read committed:shared locks會在讀取完資料後就釋放,當A交易讀取資料時,B交易是無法修改被A交易資料的正在讀取的資料,但是一旦讀取完成shared locks 就會釋放(此時A交易尚未完成),B交易就可以修改A交易之前讀取的資料。
Repeatable read:shared locks交易結束後才會釋放,所以只要A交易讀取資料時,除非到整個交易結束,否則B交易無法法修改被讀取的資料。
Serializable :shared locks會持續到交易結束,而且shared locks範圍會變大。所以只要A交易讀取資料時,除非整個交易結束,否則B交易無法修改讀取的資料與被讀取資料的特定範圍是無法進行新增的行為。
範例語法1
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRANSACTION Transaction2
SELECT *
FROM TestTable
WHERE Value='C'
GO
COMMIT
SELECT * FROM TestTable WITH (HOLDLOCK)
WHERE Value='C'
4.結論:
參考:
2019年1月1日 星期二
Python_讀取股票歷年經營績效_以遠東新1402為例_04_使用pandas畫直線圖
# -*- coding: utf-8 -*- """ Created on Wed Jan 2 13:38:28 2019 @author: ryoliu """ import requests from bs4 import BeautifulSoup import pandas as pd url = 'https://goodinfo.tw/StockInfo/StockBzPerformance.asp?STOCK_ID=1402' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \ Chrome/65.0.3325.181 Safari/537.36'} r = requests.get(url, headers = headers) r.encoding = 'utf-8' soup = BeautifulSoup(r.text, 'html.parser') rows = soup.find('div', {"id": "divFinDetail"}).find('table', {"class": "solid_1_padding_4_0_tbl"}) dfs = pd.read_html(str(rows)) df=pd.DataFrame(dfs[0]).iloc[3:19,0:3] df.columns= ['years','stockcost','summarize'] df.stockcost=pd.Series(pd.to_numeric(df.stockcost)) df.years=pd.Series(pd.to_numeric(df.years)) df.plot(x='years',y='stockcost', kind='line')