關于Oracle實時數據庫的優化思路

? ? ???關于實時數據庫的優化思路

背景

大概168個換熱站機組,每套機組將近400個點,整體有6萬多個點需要進行實時更新。數據庫里其中有一個監控參數表(yxjk_jkcs),每一個點位屬性都在里面存放,其中有一個字段CS_VALUE 是存放被更新的實時數據。

現象

? ??所有數據更新一次的時間,大概為10分鐘,而達不到2分鐘一更新的實時數據要求的效果。而且數據在更新的過程中,對服務器的資源利用量很大。

分析思路及過程:

一、利用 select * from v$sgainfo;語句查看了系統全局區域

查看了Buffer Cache Size

以及Shared Pool Size ,這兩個一個是負責結果集的緩存大小,一個是負責存儲解析SQL語句

select *from dict where table_name like '%SGA%'—全局緩存

select *from v$version;--數據庫版本情況

select *from v$sgastat WHERE POOL='shared pool' order by bytes desc;

SELECT *FROM V$SGAINFO;

select *from v$sgastat;

select *from v$sga;

select *from v$sga_value;

select *from v$sgastat where pool='shared pool'

selectvalue/1024/1024 from v$parameter where name like '%sga_target%';

?????從語句的返回結果中判斷,緩存區的字節大小為400兆,而32位系統,oracle最大可以支持到1.7G。根據這樣的結果,對緩存區進行了設置,擴大到了1.4G,保證內存的使用空間。

二、利用select * from v$sql查看SQL語句執行的日志

select * from v$sql? wherelower(sql_text) like lower('%yxjk_jkcs%');

然后根據以上的語句得出,語句的執行次數比較多,說明沒有執行預編譯。

??????declare i number;

begin

for i in 1 .. 60000 loop

?update yxjk_jkcs set CS_VALUE='{體驗中換熱站154.tyzx154.scyx_echysx}'where JKD_ID='tyzx154' and CS_ID='scyx_echysx';

end loop;

rollback;

end;

利用oracle本身實驗了一下循環預編譯,發現執行6萬次只用幾秒。同時發現這個表中的參與的兩個查詢條件 JKD_ID和CS_ID是分開的索引。于是把這兩個字段聯合起來建立了一個索引。速度又增快了一些。

三、.net下進行預編譯程序執行

? cmdstr = @"updateyxjk_jkcs set CS_VALUE=:value where JKD_ID=:jkdid and CS_ID=:jkdcs";

??????????????????????????????? OracleCommand cmd = newOracleCommand(cmdstr, conn);

???????????????????????????????cmd.Parameters.Clear();

??????????????????????????????? OracleParameter opvalue = newOracleParameter(":value",OracleType.VarChar, 100);

??????????????????????????????? //opvalue.OracleType = OracleType.VarChar;

??????????????????????????????? //opvalue.ParameterName = "@value";??

??????????????????????????? ????cmd.Parameters.Add(opvalue);

??????????????????????????????? OracleParameter opjkd = newOracleParameter(":jkdid",OracleType.VarChar, 32);

???????????????????????????

???????????????????????????????cmd.Parameters.Add(opjkd);

??????????????????????? ????????OracleParameteropjkcs = new OracleParameter(":jkdcs", OracleType.VarChar,200);

???????????????????????????

???????????????????????????????cmd.Parameters.Add(opjkcs);

?

?

??????????????????????????????? for (int i = 0; i< 60000; i++)

??????????????????????????????? {

???????????????????????????????????cmd.Parameters[":value"].Value= i.ToString();

???????????????????????????????????cmd.Parameters[":jkdid"].Value= "jdyj01^jdyj01";

???????????????????????????????????cmd.Parameters[":jkdcs"].Value= "L_T_two_supply_Y3";

???????????????????????????????????cmd.ExecuteNonQuery();

??????????????????????????????? }

不過在這種情況下,發現交互后,速度仍然不夠理想。

?

?

四、查詢在執行過程中,哪個語句及應用比較慢。

select a.seconds_in_wait, a.* fromv$session_wait a where a.wait_class<>'Idle' order by a.seconds_in_waitdesc--查到的應用慢

查詢到了操作,執行了日志操作,并頻繁的進行的commit操作導致。

select?a.* from v$session a? wherea.sid=138

查到了相應應用的相關信息,就是用傳統的數據提交方式,因為.net下的每一個ExecutNonquery相當于一次語句并一次提交,所以需要變成事務型,多條語句一次提交從而化對應程序的操作方式。

五、減少提交次數,累計事務

?

??OracleConnection myConnection = new OracleConnection(connstr);

??????????????????????? myConnection.Open();

??????????????????????? OracleCommand myCommand= myConnection.CreateCommand();

??????????????????????? OracleTransactionmyTrans;???????????????? ?

???myTrans= myConnection.BeginTransaction(IsolationLevel.ReadCommitted);

??????????????????????? myCommand.Transaction =myTrans;

??cmdstr = @"update yxjk_jkcs set CS_VALUE=:value where JKD_ID=:jkdidand CS_ID=:jkdcs";

??????????????????????????????? myCommand.CommandText= cmdstr;

???????????????????????????????myCommand.Parameters.Clear();

?OracleParameter opvalue = new OracleParameter(":value",OracleType.VarChar, 100);?

???????????????????????????????myCommand.Parameters.Add(opvalue);

OracleParameter opjkd = newOracleParameter(":jkdid", OracleType.VarChar, 32);

myCommand.Parameters.Add(opjkd);

?OracleParameter opjkcs = newOracleParameter(":jkdcs", OracleType.VarChar, 200);

???????????????????????????????myCommand.Parameters.Add(opjkcs);

?

??? ?????????for (int p = 0; p < myllsls.Length;p++)

??????????????????????????????? {

??????????????????????????????????? stringonesql = myllsls[p];

??????????????????????????????????? int fs =onesql.IndexOf(" where JKD_ID=");

???????????????????????????? ???????string jkdidstr = onesql.Substring(fs +14);

??????????????????????????????????? string[]jkdcs = jkdidstr.Split(new string[] { "' and CS_ID='" },StringSplitOptions.RemoveEmptyEntries);

??????????????????????????????????? string jkd= jkdcs[0];

?? ?????????????????????????????????string jkcs =jkdcs[1].ToString().Replace("'\r", "");

???????????????????????????????????myCommand.Parameters[":value"].Value =p.ToString()+"##########";

???????????????????????????????????myCommand.Parameters[":jkdid"].Value =jkd.Replace("'", "");

???????????????????????????????????myCommand.Parameters[":jkdcs"].Value =jkcs.Replace("'", "");

???????????????????????????????????

???????????????????????????????????myCommand.ExecuteNonQuery();

????????????????????????? ??????????

??????????????????????????????????? if (p %5000 == 0)

??????????????????????????????????? {

???????????????????????????????????????myTrans.Commit();

??????????????????????????????????????? myTrans= myConnection.BeginTransaction(IsolationLevel.ReadCommitted);

???????????????????????????????????????Console.WriteLine(p.ToString()+"?"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") );

???????????????????????????????????????mydialog.WriteLine(p.ToString() + "?" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

??????????????????????????????????? }

??????????????????????????????? }

以這樣的方式每5000條提交一次,節省了大量的頻繁交互,速度就有了很大的提升。

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388163.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388163.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388163.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【轉】使用 lsof 查找打開的文件

在 UNIX 環境中&#xff0c;文件無處不在&#xff0c;這便產生了一句格言&#xff1a;“任何事物都是文件”。通過文件不僅僅可以訪問常規數據&#xff0c;通常還可以訪問網絡連接和硬件。在有些情況下&#xff0c;當您使用 ls 請求目錄清單時&#xff0c;將出現相應的條目。在…

ESLint簡介

ESLint簡介 ESLint是一個用來識別 ECMAScript 并且按照規則給出報告的代碼檢測工具&#xff0c;使用它可以避免低級錯誤和統一代碼的風格。如果每次在代碼提交之前都進行一次eslint代碼檢查&#xff0c;就不會因為某個字段未定義為undefined或null這樣的錯誤而導致服務崩潰&…

數據科學與大數據是什么意思_什么是數據科學?

數據科學與大數據是什么意思Data Science is an interdisciplinary field that uses a combination of code, statistical analysis, and algorithms to gain insights from structured and unstructured data.數據科學是一個跨學科領域&#xff0c;它結合使用代碼&#xff0c;…

C#制作、打包、簽名、發布Activex全過程

一、前言 最近有這樣一個需求&#xff0c;需要在網頁上面啟動客戶端的軟件&#xff0c;軟件之間的通信、調用&#xff0c;單單依靠HTML是無法實現了&#xff0c;因此必須借用Activex來實現。由于本人主要擅長C#&#xff0c;自然本文給出了用C#實現的范例&#xff0c;本文的預期…

用Python創建漂亮的交互式可視化效果

Plotly is an interactive Python library that provides a wide range of visualisations accessible through a simple interface.Plotly是一個交互式Python庫&#xff0c;通過簡單的界面即可提供廣泛的可視化效果。 There are many different visualisation libraries avai…

CCF 201809-1 買菜

問題描述| 試題編號&#xff1a; | 201809-2 | | 試題名稱&#xff1a; | 買菜 | | 時間限制&#xff1a; | 1.0s | | 內存限制&#xff1a; | 256.0MB | 問題描述 小H和小W來到了一條街上&#xff0c;兩人分開買菜&#xff0c;他們買菜的過程可以描述為&#xff0c;去店里買一…

筆試題③

1.線程間通信 handler機制 2.AsyncTask 異步任務 3.HandlerThread 子線程中創建了一個 Looper對象 可以在子線程里使用消息機制 IntentService 帶了HandlerThread 并且創建了一個子線程的handler 在服務中 創建子線程執行耗時操作 耗時操作執行結束之后服務退出 如果想在Serv…

Hadoop 2.0集群配置詳細教程

Hadoop 2.0集群配置詳細教程 前言 Hadoop2.0介紹 Hadoop是 apache 的開源 項目&#xff0c;開發的主要目的是為了構建可靠&#xff0c;可拓展 scalable &#xff0c;分布式的系 統&#xff0c; hadoop 是一系列的子工程的 總和&#xff0c;其中包含 1. hadoop common &#xff…

php如何減緩gc_管理信息傳播-使用數據科學減緩錯誤信息的傳播

php如何減緩gcWith more people now than ever relying on social media to stay updated on current events, there is an ethical responsibility for hosting companies to defend against false information. Disinformation, which is a type of misinformation that is i…

[UE4]刪除UI:Remove from Parent

同時要將保存UI的變量清空&#xff0c;以釋放占用的系統內存 轉載于:https://www.cnblogs.com/timy/p/9842206.html

MySQL基礎部分總結

MySQL 1、選擇數據庫 use dbnameshow databases;2、數據表 show tablesmysql> show columns from customers;mysql> desc customers;3、show 語句 show statusshow create databasesshow create tableshow grants4、select 檢索 4.1.1版本后不再區分大小寫&#xff0c;但…

BZOJ2503: 相框

Description P大的基礎電路實驗課是一個無聊至極的課。每次實驗&#xff0c;T君總是提前完成&#xff0c;管理員卻不讓T君離開&#xff0c;T君只能干坐在那兒無所事事。先說說這個實驗課&#xff0c;無非就是把幾根導線和某些元器件&#xff08;電阻、電容、電感等&#xff09;…

泰坦尼克號 數據分析_第1部分:泰坦尼克號-數據分析基礎

泰坦尼克號 數據分析My goal was to get a better understanding of how to work with tabular data so I challenged myself and started with the Titanic -project. I think this was an excellent way to learn the basics of data analysis with python.我的目標是更好地了…

Imperva開源域目錄控制器,簡化活動目錄集成

Imperva已公開發布域目錄控制器&#xff08;Domain Directory Controller&#xff0c;DDC&#xff09;的源代碼&#xff0c;這是一個Java庫&#xff0c;用于簡化常見的Active Directory集成。 與Java的LdapContext不同&#xff0c;這個庫構建在Apache Directory LDAP之上&#…

2018.10.24 NOIP模擬 小 C 的序列(鏈表+數論)

傳送門 考慮到a[l],gcd(a[l],a[l1]),gcd(a[l],a[l1],a[l2])....gcd(a[l]...a[r])a[l],gcd(a[l],a[l1]),gcd(a[l],a[l1],a[l2])....gcd(a[l]...a[r])a[l],gcd(a[l],a[l1]),gcd(a[l],a[l1],a[l2])....gcd(a[l]...a[r])是可以分成最多logloglog段且段內的數都是相同的。 那么我們用…

vba數組dim_NDArray — —一個基于Java的N-Dim數組工具包

vba數組dim介紹 (Introduction) Within many development languages, there is a popular paradigm of using N-Dimensional arrays. They allow you to write numerical code that would otherwise require many levels of nested loops in only a few simple operations. Bec…

Nodejs教程08:同時處理GET/POST請求

示例代碼請訪問我的GitHub&#xff1a; github.com/chencl1986/… 同時處理GET/POST請求 通常在開發過程中&#xff0c;同一臺服務器需要接收多種類型的請求&#xff0c;并區分不同接口&#xff0c;向客戶端返回數據。 最常用的方式&#xff0c;就是對請求的方法、url進行區分判…

關于position的四個標簽

四個標簽是static&#xff0c;relative&#xff0c;absolute&#xff0c;fixed。 static 該值是正常流&#xff0c;并且是默認值&#xff0c;因此你很少看到&#xff08;如果存在的話&#xff09;指定該值。 relative&#xff1a;框的位置能夠相對于它在正常流中的位置有所偏移…

python算法和數據結構_Python中的數據結構和算法

python算法和數據結構To至 Leonardo da Vinci達芬奇(Leonardo da Vinci) 介紹 (Introduction) The purpose of this article is to give you a panorama of data structures and algorithms in Python. This topic is very important for a Data Scientist in order to help …

CSS:元素塌陷問題

2019獨角獸企業重金招聘Python工程師標準>>> 描述&#xff1a; 在文檔流中&#xff0c;父元素的高度默認是被子元素撐開的&#xff0c;也就是子元素多高&#xff0c;父元素就多高。但是當子元素設置浮動之后&#xff0c;子元素會完全脫離文檔流&#xff0c;此時將會…