sybase数据库中5000笔的insert耗时单笔300ms,如何sql调优

sybase数据库中5000笔的insert耗时单笔300ms,如何sql调优,第1张

将绝大部分的SQL查询改为存储过程,这样的 *** 作毫无疑问可以提高部分性能。

凡是使用“select from xxx”的 *** 作一律具体到所需字段。

使用join连接2个以上大量数据的表,且基础数据表变化不大的查询一律使用视图,并为此视图建立索引。理由来自SQL Server联机帮助手册:

“对于标准视图而言,为每个引用视图的查询动态生成结果集的开销很大,特别是对于那些涉及对大量行进行复杂处理(如聚合大量数据或联接许多行)的视图。如果在查询中频繁地引用这类视图,可通过对视图创建唯一聚集索引来提高性能。对视图创建唯一聚集索引后,结果集将存储在数据库中,就像带有聚集索引的表一样。

1、要看你update语句发送了多少数据,修改或追入的记录的条数越多,每记条信息量越大,需要的时间越长。如果是改了百万条记录,平均1K一条记录的话,就是1个G,就算复制1个G的文件,时间也不太短。

2、要看你的服务器的性能,在我的服务器上(双CPU、4核,32G内存,4硬盘组RAID5),向某表追1百万条数据,需要的时间大约为5分钟。

下面这种是SQL Server中比较简单的查询SQL语句执行时间方法源码天空

,通过查询前的时间和查询后的时间差来计算的:

declare @begin_date datetime

declare @end_date datetime

select @begin_date = getdate()

select @end_date = getdate()

select datediff(ms,@begin_date,@end_date) as '用时/毫秒'

2:下面这种方法比较全面,将执行每个语句时采取的步骤作为行集返回,通过层次结构树的形式展示出来

set statistics profile on

set statistics io on

set statistics time ongo

<这里写上你的语句go

set statistics profile off

MySQL 在崩溃恢复时,会遍历打开所有 ibd 文件的 header page 验证数据字典的准确性,如果 MySQL 中包含了大量表,这个校验过程就会比较耗时。 MySQL 下崩溃恢复确实和表数量有关,表总数越大,崩溃恢复时间越长。另外磁盘 IOPS 也会影响崩溃恢复时间,像这里开发库的 HDD IOPS 较低,因此面对大量的表空间,校验速度就非常缓慢。另外一个发现,MySQL 8 下正常启用时居然也会进行表空间校验,而故障恢复时则会额外再进行一次表空间校验,等于校验了 2 遍。不过 MySQL 80 里多了一个特性,即表数量超过 5W 时,会启用多线程扫描,加快表空间校验过程。

如何跳过校验MySQL 57 下有方法可以跳过崩溃恢复时的表空间校验过程嘛?查阅了资料,方法主要有两种:

1 配置 innodb_force_recovery可以使 srv_force_recovery != 0 ,那么 validate = false,即可以跳过表空间校验。实际测试的时候设置 innodb_force_recovery =1,也就是强制恢复跳过坏页,就可以跳过校验,然后重启就是正常启动了。通过这种临时方式可以避免崩溃恢复后非常耗时的表空间校验过程,快速启动 MySQL,个人目前暂时未发现有什么隐患。2 使用共享表空间替代独立表空间这样就不需要打开 N 个 ibd 文件了,只需要打开一个 ibdata 文件即可,大大节省了校验时间。自从听了姜老师讲过使用共享表空间替代独立表空间解决 drop 大表时性能抖动的原理后,感觉共享表空间在很多业务环境下,反而更有优势。

临时冒出另外一种解决想法,即用 GDB 调试崩溃恢复,通过临时修改 validate 变量值让 MySQL 跳过表空间验证过程,然后让 MySQL 正常关闭,重新启动就可以正常启动了。但是实际测试发现,如果以 debug 模式运行,确实可以临时修改 validate 变量,跳过表空间验证过程,但是 debug 模式下代码运行效率大打折扣,反而耗时更长。而以非 debug 模式运行,则无法修改 validate 变量,想法破灭。

1、速度问题是多方面的,服务器的配置,系统资源正在使用的情况都要考虑

2、如果只是insert,表可以不要索引,因为索引会降低速度,可是表能不建索引吗?这些问题都很矛盾,不能只考虑插入的速度

3、一次插一条显然不是好办法 可以考虑两点:

1)、 一是建一个buffer, 把要插入的数据先放在buffer里, 攒足一定的数据(我一般是1000条, 可以根据具体情况调整), 然后集体插入

2)、 是用多线程(multi-thread)和异步通讯(unsynchronization)办法, 这样可以让插入和数据采集同步进行

2小时。

使用数据库时,用java编程把数据写入,每组数据写入时间平均是2小时,然后用查询语句读每组数据。

数据库是按照数据结构来组织、存储和管理数据的仓库。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

以上就是关于sybase数据库中5000笔的insert耗时单笔300ms,如何sql调优全部的内容,包括:sybase数据库中5000笔的insert耗时单笔300ms,如何sql调优、为什么一个百万级数据库update语句要执行很久、一次数据库事务耗时等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9547198.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存