① 一条sql执行过长的时间,你如何优化,从哪些方面
1、查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化)
2、涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合
3、如果以上两种都不能操作,非要链表查询,那么考虑对相对应的查询条件做索引。加快查询速度
4、针对数量大的表进行历史表分离(如交易流水表)
5、数据库主从分离,读写分离,降低读写针对同一表同时的压力,至于主从同步,mysql有自带的binlog实现 主从同步
6、explain分析sql语句,查看执行计划,分析索引是否用上,分析扫描行数等等
7、查看mysql执行日志,看看是否有其他方面的问题
个人理解:从根本上来说,查询慢是占用mysql内存比较多,那么可以从这方面去酌手考虑
② 为什么SQL Server运行中会隔1、2个小时就把我的内存全“吃”了呢
这是SQL Server 缓冲池的预期行为。默认情况下,在启动 SQL Server之后,SQL Server会根据操作系统报告的物理内存数来动态增大或缩小高速缓冲存储器的容量。只要可用物理内存大小保持在4MB到10MB之间,SQL Server 缓冲池就会继续增大(保留可用物理内存在4MB到10MB之间是为了避免操作系统因为缺少内存而频繁地换页)。如果物理可用内存变得较少的时候,则SQL Server会将一些内存释放给操作系统。需要采取措施限制SQL Server 的内存使用量。可以通过设置SQL Server 数据库引擎使用的内存的上下限来达到此目的。其具体步骤是:
1.打开企业管理器,展开服务器组。
2.单击该服务器,点击鼠标右键,单击属性菜单。
3.在弹出的对话框中单击内存选项卡。
内存设置方法有两种:
1.设置min server memory和max server memory 在一个范围段内。比如,我们将它设置成最小0MB,最大255MB。这种方法在为一台服务器中运行多个应用程序分配内存时非常有用。
2.设置 min server memory 和 max server memory 为同一数值。比如,可以将它最大和最小值都设置成255MB。这样的设置方法与窗口中的另一个选项“使用固定的内存大小” 相一致。
虽然内存最小值和最大值设置是高级选项,但在设置完毕之后,最好还是先将SQL Server服务停止后再重新运行,以便SQL Server能更好地对内存进行合理安排。
③ SQL存储过程我想设定一个时间,过三个小时后再执行这个存储过程
这个不需要任何代码,一般的sql服务器都有计划任务功能,不清楚你那具体是哪种数据库,自己搜索一下。
④ mssql数据库变为单用户模式要执行多长时间。 查询执行了一个小时了还在执行。
关于系弊态统数据库的恢复总结如下:
在SQL Server数据库中,系统信息存储在系统数据库中,主要的系统数据库包括:
master-从整体上控制用户数据库和SQL Server操作,在创建了任何用租举源户定义的对象后,都要备份它
model-为新数据库提供模版和原型
msdb-包含了有关作业、报警及操作员等信息
如果包含系统数据库的介质变了,那么必须重建系统数据库,如果你仍然可以启动SQL Server服务,则可以通过RESTORE语句从系统数据库的备份中恢复数据库。
如果master坏了,不能启动系统,可以按照下面步骤进行恢复
1.重建系统数据库 运行c:\mssql7\binn\rebuildm.exe,按照提示进行即可,
过程中需要系统数据库样本的路径,可在安装光盘中找到;
2 重建系统数据库后,启动SQL Server服务,用系统数据库的备份恢复数据库
就行了通常恢复顺序为master->msdb->model
在恢复master的备份时要注意:必须在单用户(single user)模式下进行
a.进入单用户模式的方法:
1.在命令行模式下输入sqlservr -c -f -m或者输入sqlservr -m
其中:-c 可以缩短启动时间,SQL Server 不作为Windows NT的服务答悄启动
-f 用最小配置启动SQL Server
-m 单用户模式启动SQL Server
2.可以在控制面板-服务-MSSQLServer的启动参数中输入-c -f -m或者输入-m,点击开始
3.进行master数据库的恢复
a.直接进入查询分析器,有个提示不要理会它
输入恢复语句进行数据库恢复:
RESTORE DATABASE master from disk='c:\具体的备份文件名'
b.或者用这个,在命令提示符下输入,注意大小写
使用"windows身份验证"的,输入:isql /E
使用"sql server和windows身份验证"的,输入:isql /U"用户名" /P"密码"
然后在出现的提示符下输入(注意1>,2>是提示符):
⑤ 请教一个sql执行时间很长的问题
append就行了,加了append几乎不产生undo。至于临时表,和undo有什么关系?临时表该生成的undo照样生成。难道你会话级临时表就不能rollback了吗
⑥ plsql如何测试一条sql的执行时间
select sysdate()
你的sql
select sysdate()
一起执行, 结果能看到2个时间戳,
如果写存储过程,可以定点记录日志表中
⑦ 为什么sql过长会执行失败,举一个案例
不同的数据库应该是不一样的,不过我觉得任何东局大液西不可能完全没有限制,所以sql过长会失败是桐物肯定的。
以Mysql为例,在其配置文件中有一个设置
max_allowed_packet = 1M
此时如果你的SQL长度超过了1M就会被截断,从仿清而导致执行失败。
⑧ 在数据库中查看一个SQL执行一次耗时多少
下面这种是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
⑨ 一个8万条记录的表,一句SQL UPDATE更新二小时不果,求解答
建前档个索引再试试:
CREATENONCLUSTEREDINDEXIX_表_代唯中码_名称_序号
ON表指悔山(工作代码,名称,报告期序号);
⑩ 在plsql中,对于同一个sql语句多次执行时,为什么每次执行时间都不一样呢
用通俗的话来说,这就像你去上班,每次花上班路上的时间会完全一样吗?不会吧。
用专颤猜业术语来讲,计算机凳洞扮每次传输数据,处理数据,内存枣灶分配的时间当然不会完全一样了,而且plsql在测时间时也存在一些误差,这就导致了时间的不一样。