當前位置:首頁 » 編程語言 » pandastosql異常處理
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

pandastosql異常處理

發布時間: 2023-02-27 04:31:02

『壹』 系統的一個異常sql的處理

下面是在awr報告裡面看到的有問題的sql,是9個變數的,在應用前台屬於關聯查詢,在sqlplus裡面手工執行檢查實際執行情況如下:

下面是查詢到的綁定變數值,可以通過查看v$sql_bind_capture視圖來查看變數的實際值,如果時間比較久,可以使用如下的語句查看歷史的綁定變數信息

以下是開啟了autotrace 選項跟蹤的手工執行情況,從執行效率上看是沒有問題的。

從執行計劃和表的數據量等方面判斷如果sql的開銷有問題,應該出現在表SAMS_CHECKINOUT上面,下面檢查該表上面索引的創建語句看是否有問題

下面是在awr報告裡面看到的有問題的sql,是9個變數的,在應用前台屬於關聯查詢,在sqlplus裡面手工執行檢查實際執行情況如下:

下面是查詢到的綁定變數值,可以通過查看v$sql_bind_capture視圖來查看變數的實際值,如果時間比較久,可以使用如下的語句查看歷史的綁定變數信息

以下是開啟了autotrace 選項跟蹤的手工執行情況,從執行效率上看是沒有問題的。

從執行計劃和表的數據量等方面判斷如果sql的開銷有問題,應該出現在表SAMS_CHECKINOUT上面,下面檢查該表上面索引的創建語句看是否有問題

從上圖可以看到,實際測試出來的執行計劃跟awr報告上不同。

現在要對sql做測試

我們通過/*+ gather_plan_statistics */ 收集的相關執行計劃及其統計信息與該SQL的AWR報告中的執行計劃不同,且邏輯讀的數量與AWR報告中的數值也相差巨大。因此,為了更准確的判斷問題,按以下方法測試。
1、SQL在生產庫(SAMS庫的實例 1上,實例名為sams1 )上,在SQLPLUS中執行。
2、執行後,在同一SQLPLUS窗口中,立即執行以下命令:

結果如下:

1、在目錄下創建一個腳本文件,用來獲取更加相信的信息。
2、在SQLPLUS中,執行以下命令:@sql_rpt 3271368959 1 24114 24115 99vaabs5ptktb
4、執行完成後,在該目錄下生成一個HTML文檔,拿到更加詳細的sql統計信息附帶表的數據信息

初步分析如下:
1、該SQL執行一次的邏輯讀為11130塊次,其中第37步的邏輯讀為6127塊次,佔了一半還多。而該步的操作是根據前面的獲取到的ROWID,回表SAMS_CHECKINOUT獲取"SC".「CHECKTIME"[TIMESTAMP,11], "SC"."VERIFYCODE"[CHARACTER,4], "SC"."SN"[NVARCHAR2,40], "SC"."INSYSTIME"[TIMESTAMP,11]四列的內容。
2、第38步對SAMS_ICLOCK表的全表掃描,對整個SQL的邏輯讀也有較大貢獻。但這個不是問題的關鍵

另外索引上有兩個想法:
1、新建組合索引或改造已有索引,按如下順序構建組合索引:
(BADGENUMBER, CHECKTIME, SN, VERIFYCODE, INSYSTIME)
2、在表SAMS_ICLOCK上創建組合索引,列名及順序如下:
(SN, ALIAS)

這兩個索引先暫時不創建,先從其他方面入手
由於在測試過程中,其生成的執行計劃從未與AWR中顯示的執行計劃一致過。所以,這也許是造成不能模擬出2億個塊次邏輯讀的一個原因。因此,把有問題的SQL的執行計劃綁定到的測試SQL上。然後執行該測試SQL,並觀察和分析測試SQL的執行過程和結果來做出進一步的處理。
為完成上述想法,需要用到ORACLE的SQL PROFILE在不改變SQL文本的前提下,改變其執行計劃。操作方法如下:
1、在SQLPLUS中,生成問題SQL的創建SQL PROFILE的腳本。該腳本執行後,會要求分別輸入SQL_ID和PLAN_HASH_VALUE的值。而我們問題SQL的SQL_ID是99vaabs5ptktb,PLAN_HASH_VALUE的值是4243346097。腳本執行完成後,會在運行SQLPLUS的當前目錄中生成一個腳本文件。其名稱在執行腳本過程中的結尾有顯示。為描述方便,簡稱該生成的S腳本文件為「問題SQL腳本」。
2、再次執行該腳本,只不過這次輸入測試SQL的SQL_ID和PLAN_HASH_VALUE。其SQL_ID為3kys9xsdjrm3b,PLAN_HASH_VALUE的值為561269195。為描述方便,簡稱該生成的腳本文件為「測試SQL腳本」
3、在文本編輯工具中分別打開上述兩個腳本,將問題SQL腳本中出現在以下特徵文字之間的文字(不包含特徵文字 )復制並覆蓋掉測試SQL腳本中同樣位置的原文字:
h := SYS.SQLPROF_ATTR(
………
……….
……….
:signature := DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(sql_txt);
4、將測試SQL腳本另存為一個文件(後綴名為.sql)
5、在SQLPLUS中執行第4步另存後的腳本。
6、在SQLPLUS中原封不動的執行原測試SQL。(註:執行前設置SQLPLUS格式,以避免格式混亂。比如 set lines 200 set pagesize 100 )
7、執行 select * from table(dbms_xplan.display_cursor('','','allstats projection last'));

如果正常生成腳本,沒有報錯信息出現在屏幕上,就是生成腳本成功。比如出現下面的提示就是正常的:

『貳』 python pandas to_sql將excel數據導入到MySQL資料庫

其實吧, 一分鍾10W條數據不能算太快,10秒10W條還差不多。 可以研究一下線程+進程來處理, 或者協程+進程。處理速度肯定能讓你喊一聲「卧槽!」 哈哈。
言歸正傳, 你說的別的MySQL是不是遠程的,通過ip來連接的哈, 如果是的話那就可以理解了。 每次連接一次資料庫,都有一個網路延遲的,2台電腦之間距離越遠,這個延遲就越高,而每次導入數據的時間必須要加上這個延遲的時間的, 而本地測試的時候因為連接資料庫的時間延遲基本可以忽略不計,所以速度要比連接遠程資料庫要快很多很多。
最後, 如果想要解決這個問題的話,要麼把業務資料庫移到本地,去掉時間延遲。 要麼就用我上面說的線程+進程 或者 協程+進程的方式提高程序效率。如果無法把業務資料庫移到本地的話, 我非常推薦後者,成本也就是多學一點東西而已, 但以後可以省下非常多的時間, 效率為王嘛~

『叄』 非常的頭痛,LINQ TO SQL未標記為可序列化。救命。該怎麼解決

。救命。。。。
運行時出現以下錯誤,
但最奇怪的是我已在LINQ層把序列化模式改為「單向」了
,但還是出現此錯誤。
「/WEB」應用程序中的伺服器錯誤。
--------------------------------------------------------------------------------
程序集「System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089」中的類型「System.Data.Linq.EntitySet`1[[DAL.Student, DAL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]」未標記為可序列化。
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。
異常詳細信息: System.Runtime.Serialization.SerializationException: 程序集「System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089」中的類型「System.Data.Linq.EntitySet`1[[DAL.Student, DAL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]」未標記為可序列化。
源錯誤:執行當前 Web 請求期間生成了未處理的異常。可以使用下面的異常堆棧跟蹤信息確定有關異常原因和發生位置的信息。
------解決方案--------------------------------------------------------
------解決方案--------------------------------------------------------
不能放入ViewState,改序列化模式也沒用的
------解決方案--------------------------------------------------------
不支持真對xmlobject的序列化
------解決方案--------------------------------------------------------
這個CLASS要實現序列化和反序列化才行。
------解決方案--------------------------------------------------------
這個問題我也遇到過,只需在類上面標識一個屬性
[Serializable]
public class Tab_Game{}這樣你的問題應該可以解決了,因為在網路中傳輸是要序列化的,否則不能傳輸對象
------解決方案--------------------------------------------------------探討這個問題我也遇到過,只需在類上面標識一個屬性