///
///備份方法
///
SQLDMO.Backupbackup=newSQLDMO.BackupClass();
SQLDMO.SQLServerserver=newSQLDMO.SQLServerClass();
//顯示進度條
SQLDMO.BackupSink_=newSQLDMO.BackupSink_PercentCompleteEventHandler(Step);
backup.PercentComplete+=progress;
try
{
server.LoginSecure=false;
server.Connect(".","sa","sa");
backup.Action=SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
backup.Database="test";
backup.Files=@"D:/test/myProg/backupTest";
backup.BackupSetName="test";
backup.BackupSetDescription="Backupthedatabaseoftest";
backup.Initialize=true;
backup.SQLBackup(server);
MessageBox.Show("Backupsuccessed.");
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
finally
{
server.DisConnect();
}
this.pbDB.Value=0;
///
///還原方法
///
SQLDMO.Restorerestore=newSQLDMO.RestoreClass();
SQLDMO.SQLServerserver=newSQLDMO.SQLServerClass();
//顯示進度條
SQLDMO.RestoreSink_=newSQLDMO.RestoreSink_PercentCompleteEventHandler(Step);
restore.PercentComplete+=progress;
//KILLDataBaseProcess
SqlConnectionconn=newSqlConnection("Server=.;Database=master;UserID=sa;Password=sa;Trusted_Connection=False");
conn.Open();
SqlCommandcmd=newSqlCommand("SELECTspidFROMsysprocesses,sysdatabasesWHEREsysprocesses.dbid=sysdatabases.dbidANDsysdatabases.Name='test'",conn);
SqlDataReaderdr;
dr=cmd.ExecuteReader();
ArrayListlist=newArrayList();
while(dr.Read())
{
list.Add(dr.GetInt16(0));
}
dr.Close();
for(inti=0;i<list.Count;i++)
{
cmd=newSqlCommand(string.Format("KILL{0}",list),conn);
cmd.ExecuteNonQuery();
}
conn.Close();
try
{
server.LoginSecure=false;
server.Connect(".","sa","sa");
restore.Action=SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
restore.Database="test";
restore.Files=@"D:/test/myProg/backupTest";
restore.FileNumber=1;
restore.ReplaceDatabase=true;
restore.SQLRestore(server);
MessageBox.Show("Restoresuccessed.");
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
finally
{
server.DisConnect();
}
this.pbDB.Value=0;
② oracle 中怎麼監控sql執行的進度
pl/sql tool session 找到相應的session 一般應用程序是 JDBC Thin Client 然後點下面的sqltext就可以看到執行到那句話了,可以不停刷新看sql變化
③ 如何查看PostgreSQL正在執行的SQL
1、首先登錄sql server managment。
④ 並行查詢讓SQL Server加速運行
並行查詢其優勢就是可以通過多個線程來處理查詢作業 從而提高查詢的效率 SQL Server資料庫為具有多個CPU的山帆或資料庫伺服器提供並行查詢的功能 以優化查詢作業的性能 也就是說 只要資料庫伺服器有多個CPU 則資料庫系統就可以使用多個操作系統進程並行執行查詢操作 來加速完成查詢作業
一 並行查詢三步走
並行查詢作業在資料庫中 主要經過三個步驟
首先 資料庫會判斷是否需要進行並行查詢 在資料庫中有一個查詢優化器 會對SQL語句進行優化 然後資料庫才會去執行查詢語句 而這個查詢器在對SQL語句進行查詢優化時 其中一個動作就是判斷是否需要對SQL語句進行查詢優化 也就是說 並不是所有的SQL查詢語句都可以從並行查詢中獲取收益 如果查詢優化器認為查詢語句可以從並行查詢中獲取收益的話 則就會將交換運算符插入到查詢執行計劃中 為並行查詢做准備 故哪些語句需要採用並行查詢 哪些不需要 這不用資料庫管理員關心 資料庫查詢優化器會幫管理員作出這個決定 資料庫管理員需要清楚的是 在哪些情況下 資料庫SQL優化器會認為不宜採用並行查詢 通常情況下 只要滿足以下條件的任何一個 則就不會執行並行查詢 一是對於特定的查詢 查詢優化器認為串列查詢執行計劃要快於任何可能的並行執行計劃;二是查詢的串列執行成本並不高 不需要進行並行查詢;三是查詢中包含無法並行運行的標量運算符或者關系運算符 若從資料庫管理員的角度講 第三個條件對我們具有最大的影響 當資料庫預計未來可能利用並行查詢來提高資料庫性能時 則在資料庫設計時 就需要注意避免使用那些無法在並行查詢功能中使用的運算符 因為某些關系運算符或者邏輯運算符可能會要求查詢計劃一定要在串列模式中進行 或者部分需要在串列模式下進行 如此的話 查詢優化器就不會利用並行查詢功能來提高查詢語句的性能 這是資料庫管理員在資料庫設計時必須要考慮到的一個細節問題
其次 確定並行的進程數 當查詢優化器在查詢語句中插入交叉運算符之後 資料庫就會執行並行查詢 並行查轎凳詢在執行計劃時可以使用多個線程 此時 就又遇到了一個問題 資料庫會把這個查詢作業分成幾個進程操作呢?此時 資料庫管理員就需要知道上什麼叫做並行度 其實 在處理並行查詢的時候 數據需要知道最大可使用的進程與實際使用的進程 而最大可使用的進程就叫做並行度 這個並行度的值是在伺服器級別中進行設置 也可以通過系統存儲過程來進行修改 但是 最大可使用進程數不一定等於實際是用進程數 實際是用進程數是資料庫在查詢計劃執行時初始化的時候確定的 也就是說 這不用資料庫管理員去額外的設定 資料庫系統會自動根據計劃的復雜程度來確定合理的進程數目 當然其實際採用的進程數不能夠超過並行度 即最大可以使用的進程數
最後執行查詢 當以上內容確定好之後 資料庫就會執行具體的查詢語句 在這一步中 需要注意一個問題 資料庫管理員還可以在查詢語句中指定MAXDOP查詢提示來修改這個進度值 也就是說 如果某個查詢作業資料庫管理員認為可能會耗時比較久 就可以為這個查詢作業設置比較大的進度值 當利用MAXDOP查詢提示設置這個並行進度值之後 它會覆蓋預先設置的默認值 從而實現針對單個查詢語句設置額外的進度值 以提高某些特殊查詢作業的性能
二 並行查詢中需要注意的內容
注意點一逗伍 需要注意硬體方面的限制
並行查詢是資料庫提高查詢性能的一個有力舉措 不過其往往受到比較大的約束 如上面提高的一些基於成本考慮之外 還有一些硬性的限制 如通常情況下 只有在資料庫伺服器有多個微處理器(CPU )的情況下資料庫才會考慮執行並行查詢 也就是受 只有具有多個CPU的計算機才能夠使用並行查詢 這是一個硬性的限制條件 另外在查詢計劃執行過程中 資料庫還會判斷當時是否有足夠多的線程可以使用 每個查詢操作都要求一定的線程數才能夠執行;而且執行並行計劃比執行串列計劃需要更多的線程 所需要的線程數也會隨著並行度的提高而提高 如果在並行計劃執行的時候 當時資料庫伺服器沒有足夠的線程讓並行計劃使用的話 資料庫引擎就會自動減少並行度 甚至會放棄並行查詢而改為串列計劃 所以說 資料庫是否能夠執行並行查詢 要受到其硬體的限制 為此 如果企業真的需要通過並行查詢來提高資料庫性能的話 則管理員就需要根據情況來調整硬體配置
注意點二 不建議對所有查詢都使用並行查詢
通常情況下 筆者認為最好只對大型表的連接查詢 大量數據的聚合操作 大型結果集的重復排序等等操作才應用並行查詢的功能 如果在這些操作上執行並行查詢的話 那麼其改善資料庫性能的效果是非常明顯的 相反 如果對於簡單查詢執行並行查詢的話 可能執行並行查詢所需要的額外協調工作會大於其潛在的性能提升 所以 資料庫管理員在確定是否需要執行並行查詢功能的話 需要慎重 筆者的建議是 在資料庫伺服器級別上 最好不要設置並行查詢 即把並行度設置為 或者一個比較小的值 然後對於一些特殊的查詢操作 利用MAXDOP查詢提示來設置最大的可使用進程數 如此的話 可能會更加的合理 如果有時候資料庫管理員不知道是否需要採用並行查詢功能的話 則可以通過資料庫自帶的統計功能進行判斷 為了區別並行查詢計劃到底有沒有從並行查詢中受益 資料庫引擎可以將執行查詢的估計開銷與並行查詢的開銷閥值進行比較 並行計劃只有對需時較長的查詢通常更加有益;因為其性能優勢將抵消初始化 同步和終止並行計劃所需的額外時間開銷
注意點三 資料庫會根據查詢所涉及到的行數來判斷是否要並行查詢
上面談到 最好對大型表的連接查詢 大量數據的聚合操作 大型結果集的重復排序等等操作才應用並行查詢的功能 因為只有如此 並行查詢帶來的收益才會超過其付出的代價 但是 並不是說連接查詢 聚合操作 排序等作業都適合採用並行查詢 當資料庫在考慮並行查詢計劃的時候 查詢優化器還會去確定所涉及到的行數 如果所涉及到的行數台少 則將不會考慮執行並行查詢計劃 而會採用串列方式執行查詢語句 如此的話 可以避免因為啟動 分發 協調的開銷大大超過並行執行作業所帶來的收益 這本來是一個不錯的設計 但是也會給資料庫管理員帶來一定的麻煩 如現在資料庫管理員想要測試並行查詢到底可以在多大程度上影響查詢操作 就有點麻煩 因為其有數據量的限制 如果資料庫管理員需要進行這個測試 還不得不先在資料庫系統中導入足夠多的數據才行 這就限制了資料庫管理員的測試操作 不過話說回來 這個機制仍然是不錯的 因為資料庫管理員不用去考慮 當資料庫規模到多大的時候採用並行查詢
注意點四 同一個操作在不同時候會採用不同的進程數
lishixin/Article/program/SQLServer/201311/22469