① 一條sql執行過長的時間,你如何優化,從哪些方面
1、查看sql是否涉及多表的聯表或者子查詢,如果有,看是否能進行業務拆分,相關欄位冗餘或者合並成臨時表(業務和演算法的優化)
2、涉及鏈表的查詢,是否能進行分表查詢,單表查詢之後的結果進行欄位整合
3、如果以上兩種都不能操作,非要鏈表查詢,那麼考慮對相對應的查詢條件做索引。加快查詢速度
4、針對數量大的表進行歷史表分離(如交易流水表)
5、資料庫主從分離,讀寫分離,降低讀寫針對同一表同時的壓力,至於主從同步,mysql有自帶的binlog實現 主從同步
6、explain分析sql語句,查看執行計劃,分析索引是否用上,分析掃描行數等等
7、查看mysql執行日誌,看看是否有其他方面的問題
個人理解:從根本上來說,查詢慢是佔用mysql內存比較多,那麼可以從這方面去酌手考慮
② 為什麼SQL Server運行中會隔1、2個小時就把我的內存全「吃」了呢
這是SQL Server 緩沖池的預期行為。默認情況下,在啟動 SQL Server之後,SQL Server會根據操作系統報告的物理內存數來動態增大或縮小高速緩沖存儲器的容量。只要可用物理內存大小保持在4MB到10MB之間,SQL Server 緩沖池就會繼續增大(保留可用物理內存在4MB到10MB之間是為了避免操作系統因為缺少內存而頻繁地換頁)。如果物理可用內存變得較少的時候,則SQL Server會將一些內存釋放給操作系統。需要採取措施限制SQL Server 的內存使用量。可以通過設置SQL Server 資料庫引擎使用的內存的上下限來達到此目的。其具體步驟是:
1.打開企業管理器,展開伺服器組。
2.單擊該伺服器,點擊滑鼠右鍵,單擊屬性菜單。
3.在彈出的對話框中單擊內存選項卡。
內存設置方法有兩種:
1.設置min server memory和max server memory 在一個范圍段內。比如,我們將它設置成最小0MB,最大255MB。這種方法在為一台伺服器中運行多個應用程序分配內存時非常有用。
2.設置 min server memory 和 max server memory 為同一數值。比如,可以將它最大和最小值都設置成255MB。這樣的設置方法與窗口中的另一個選項「使用固定的內存大小」 相一致。
雖然內存最小值和最大值設置是高級選項,但在設置完畢之後,最好還是先將SQL Server服務停止後再重新運行,以便SQL Server能更好地對內存進行合理安排。
③ SQL存儲過程我想設定一個時間,過三個小時後再執行這個存儲過程
這個不需要任何代碼,一般的sql伺服器都有計劃任務功能,不清楚你那具體是哪種資料庫,自己搜索一下。
④ mssql資料庫變為單用戶模式要執行多長時間。 查詢執行了一個小時了還在執行。
關於系弊態統資料庫的恢復總結如下:
在SQL Server資料庫中,系統信息存儲在系統資料庫中,主要的系統資料庫包括:
master-從整體上控制用戶資料庫和SQL Server操作,在創建了任何用租舉源戶定義的對象後,都要備份它
model-為新資料庫提供模版和原型
msdb-包含了有關作業、報警及操作員等信息
如果包含系統資料庫的介質變了,那麼必須重建系統資料庫,如果你仍然可以啟動SQL Server服務,則可以通過RESTORE語句從系統資料庫的備份中恢復資料庫。
如果master壞了,不能啟動系統,可以按照下面步驟進行恢復
1.重建系統資料庫 運行c:\mssql7\binn\rebuildm.exe,按照提示進行即可,
過程中需要系統資料庫樣本的路徑,可在安裝光碟中找到;
2 重建系統資料庫後,啟動SQL Server服務,用系統資料庫的備份恢復資料庫
就行了通常恢復順序為master->msdb->model
在恢復master的備份時要注意:必須在單用戶(single user)模式下進行
a.進入單用戶模式的方法:
1.在命令行模式下輸入sqlservr -c -f -m或者輸入sqlservr -m
其中:-c 可以縮短啟動時間,SQL Server 不作為Windows NT的服務答悄啟動
-f 用最小配置啟動SQL Server
-m 單用戶模式啟動SQL Server
2.可以在控制面板-服務-MSSQLServer的啟動參數中輸入-c -f -m或者輸入-m,點擊開始
3.進行master資料庫的恢復
a.直接進入查詢分析器,有個提示不要理會它
輸入恢復語句進行資料庫恢復:
RESTORE DATABASE master from disk='c:\具體的備份文件名'
b.或者用這個,在命令提示符下輸入,注意大小寫
使用"windows身份驗證"的,輸入:isql /E
使用"sql server和windows身份驗證"的,輸入:isql /U"用戶名" /P"密碼"
然後在出現的提示符下輸入(注意1>,2>是提示符):
⑤ 請教一個sql執行時間很長的問題
append就行了,加了append幾乎不產生undo。至於臨時表,和undo有什麼關系?臨時表該生成的undo照樣生成。難道你會話級臨時表就不能rollback了嗎
⑥ plsql如何測試一條sql的執行時間
select sysdate()
你的sql
select sysdate()
一起執行, 結果能看到2個時間戳,
如果寫存儲過程,可以定點記錄日誌表中
⑦ 為什麼sql過長會執行失敗,舉一個案例
不同的資料庫應該是不一樣的,不過我覺得任何東局大液西不可能完全沒有限制,所以sql過長會失敗是桐物肯定的。
以Mysql為例,在其配置文件中有一個設置
max_allowed_packet = 1M
此時如果你的SQL長度超過了1M就會被截斷,從仿清而導致執行失敗。
⑧ 在資料庫中查看一個SQL執行一次耗時多少
下面這種是SQL Server中比較簡單的查詢SQL語句執行時間方法源碼天空
,通過查詢前的時間和查詢後的時間差來計算的:
declare @begin_date datetime
declare @end_date datetime
select @begin_date = getdate()
select @end_date = getdate()
select datediff(ms,@begin_date,@end_date) as '用時/毫秒'
2:下面這種方法比較全面,將執行每個語句時採取的步驟作為行集返回,通過層次結構樹的形式展示出來
set statistics profile on
set statistics io on
set statistics time ongo
<這里寫上你的語句...go
set statistics profile off
⑨ 一個8萬條記錄的表,一句SQL UPDATE更新二小時不果,求解答
建前檔個索引再試試:
CREATENONCLUSTEREDINDEXIX_表_代唯中碼_名稱_序號
ON表指悔山(工作代碼,名稱,報告期序號);
⑩ 在plsql中,對於同一個sql語句多次執行時,為什麼每次執行時間都不一樣呢
用通俗的話來說,這就像你去上班,每次花上班路上的時間會完全一樣嗎?不會吧。
用專顫猜業術語來講,計算機凳洞扮每次傳輸數據,處理數據,內存棗灶分配的時間當然不會完全一樣了,而且plsql在測時間時也存在一些誤差,這就導致了時間的不一樣。