当前位置:首页 » 编程语言 » 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{}这样你的问题应该可以解决了,因为在网络中传输是要序列化的,否则不能传输对象
------解决方案--------------------------------------------------------探讨这个问题我也遇到过,只需在类上面标识一个属性