繼承自:http://bbs.csdn.net/topics/390612039
因不能編輯標題,只好新開帖繼續詢問:
我問如何用資料庫并發查詢時,記憶體、虛擬記憶體及句柄基本上不變,只是查詢速度太慢,TMD,咋加了2個月原始資料后,虛擬記憶體就激增了(程式改了一點,無外乎調了一下架構,因避免同時讀寫同一張表,輪詢查詢原始資料時加了一對鎖執行緒關鍵區域的東東)。
1、什么原因導致虛擬記憶體激增?
2、存盤程序能否實作動態查詢(即表名、列名及查詢條件每次查詢都會變化),如何操作?
3、因資料庫是從原始資料庫復制而來,本身不支持SQL快取依賴,資料庫級SQL快取依賴如何設定?最好通過Delphi7設定,如若不行,通過SQL2005設定也可。
uj5u.com熱心網友回復:
不好意思,就是架構改糟了,原來只創建一次的TADOQuery,叫我改為輪詢一次創建1次了,改回來就對了。那就繼續2跟3吧,問題變為“如何提高SQL動態查詢效率?”PS:題目咋改?uj5u.com熱心網友回復:
Create Procedure AAA@TableName string, @Column string, @where string 其中column可以多個欄位組合, where也可以多個條件組合。 希望可以解決。
uj5u.com熱心網友回復:

那如果存盤程序中引數變了,是否要重編譯?如果重編譯,跟Delphi7中寫SQL,再傳給SQL Server 2005,單次查詢資料量不大的情況下,資料庫回應速度又能差多少?
另,幫忙看看性能監視器(winxp3)截圖能說明什么?能否從中找出性能優化入口點?還有每秒事務(transactions)最大有15,為啥監測不到激活的事務?
uj5u.com熱心網友回復:
看資料上說,如果從資料庫快取中讀資料,比從原始表中讀資料要快,那如果我在輪詢查詢資料之前將要讀的表(共4張,都是按月建的,最早從今年5月開始,以后理論上每月增加,且每5分鐘存一組資料(1-12個)不等,我想說的是資料量相當可觀)通過存盤程序或其它手段把這些表(分批或全部)寫入快取,然后通過Delphi7動態撰寫SQL讀快取表,此法可行否?如何操作?uj5u.com熱心網友回復:
在執行緒執行函式Execute()中加入ms SQL SERVER駐留記憶體命令列陳述句為......
with qry2 do begin
close;
SQL.Clear;
SQL.Add('DECLARE @db_id int, @tbl_id int');
SQL.Add('USE drn');
SQL.Add('SET @db_id = DB_ID('+quotedstr('drn')+')');
SQL.Add('SET @tbl_id = OBJECT_ID('+quotedstr('[drn].[dbo].[lldata_'+tabledate+']')+')');
SQL.Add('DBCC PINTABLE (@db_id, @tbl_id)');
open;
end;
.....
結果運行時報錯:報EDataBaseerror類例外訊息‘CommandText does not return a result set’。
在查詢之前加入
......
qry2.ExecuteOptions:=[eoExecuteNoRecords];//查詢以不回傳記錄方式執行
with qry2 do begin
......
結果又報EOleException類例外訊息‘引數型別不正確,或不在可以接受的范圍之內,或與其它引數沖突’。
啥原因造成的?
uj5u.com熱心網友回復:
ExecSQL ~~~uj5u.com熱心網友回復:
用ExecSQL,回傳值為-1,好像引數不支持。另,老板想采用本地服務器+遠程服務器+采集器三層架構,采集器中的所有資料全部上傳至本地服務器,想通用化,打算用xml檔案做載體,弱弱的問一下,如何將寫入資料庫的內容同步寫入xml,寫入資料庫用的是TADOQuery的Insert插入,好像不回傳資料集,用TADOQuery.Savetofile要報錯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/121187.html
標籤:數據庫相關
上一篇:求教控制元件屬性
下一篇:浮點型轉4位元組16進制
