-
编写高质量代码改善C#程序——使用泛型集合代替非泛型集合(建议20)
软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和若干集合类。不管是数组还是集合类,它们都有各自的优缺点...
数据库操作教程 2022-09-23 17:54:32 -
使用SqlServerCTE递归查询处理树、图和层次结构
CTE(CommonTableExpressions)是从SQLServer2005以后版本才有的。指定的临时命名结果集,这些结果集称为CTE...
数据库操作教程 2022-09-23 17:54:19 -
SqlServer应用之sys.dm_os_waiting_tasks引发的疑问(下)
sys.dm_os_waiting_tasks引发的疑问(下)前面写了两篇了,其实不光是说sys.dm_os_waiting_tasks的应用,研究了挺长时间的并行,自己有了一些理解,所以分享出来希望有什么理解错误的地方大神们及时纠正!! 给出前两篇的连接:SqlServer应用之sys.dm_os_waiting_tasks引发的疑问(上)SqlServer应用之sys.dm_os_waiting_tasks引发的疑问(中)前面两篇的编写有一个疑惑...最初认为的并行比如这个语句: select*fromt1innerjoint2ont1.a=t2.aOPTION(querytraceon8649) 在我的理解并行是开几个线程去获取T1数据,另外几个线程获取T2数据,然后关联结果形成最后结果集。可是试验了才发现自己原来想的和看到的结果不太一样呀!!!! 下面我们用前两篇的例子继续做试验... 这次我们2张表同时给锁住,看看等待里是什么情况...
数据库操作教程 2022-09-23 17:49:13 -
SqlServer异常处理常用步骤
SQLServer常见的问题主要是SQL问题造成,常见的主要是CPU过高和阻塞。一、CPU过高的问题1、查询系统动态视图查询执行时间长的sql语句WITHProcessCTE(blocked)AS(SELECTspidFROMsys.sysprocessesWHEREcpu>500)SELECTdistincta.*FROM(SELECTTEXT,AA.*FROMsys.sysprocessesAACROSSAPPLYsys.dm_exec_sql_text(AA.sql_handle))aJOINProcessCTEbucteWITH(NOLOCK)ONbucte.blocked=a.spid--whereloginame='TCScenery'ORDERBYa.CPU二、阻塞问题1、查询系统动态视图查询阻塞的sql语句WITHProcessCTE(blocked)AS(SELECTblockedFROMsys.sysprocessesWHEREblocked>0unionSELECTblockedFROMsys.sysprocessesWHEREblocked>0...
数据库操作教程 2022-09-23 17:47:03 -
SQLServer使用游标处理Tempdb究极竞争-DBA问题-程序员必知
SQLServertempdb分配竞争算是DBA老生常谈的问题了,几乎现在所有的DBA都知道多建几个文件来解决/缓解问题.但是深层次的的竞争依旧不可避免.这里给大家剖析下游标在tempdb中的特点使其在一定场景下替代临时表/表变量对象,解决深层次的tempdb竞争问题.在抛出这个不可避免的问题之前我们先简要看下什么是tempdb竞争.我们拿SQLServer创建一个临时表的过程来描述1在系统表中创建表的条目(系统数据页中)2分配一个IAM页并找到一个混合区在PFS页中标记3分配一个数据页(查看SGAM页,查看PFS页后并更新,更新IAM页)4表记录记录到系统表中从上述过程可以看出创建一个简单临时表需要查找,更新一系列的系统表/系统数据页,且当使用完删除临时表时上述操作逆向进行.索引相应的创建/销毁一旦大量并发,内部竞争也就产生了.虽然tempdb的缓存策略一定程度可以缓解相应创建过程的IAM,数据页分配,SqlServertempdb原理-缓存机制解析实践,但竞争依旧.可以看到SGAM,PFS等系统页是表创建过程的必经之路,他的分配竞争也就十分明显了.这也就是为什么采用多个数据文件,让...
数据库操作教程 2022-09-23 17:45:42 -
通过Windows批处理命令执行SQLServer数据库备份
建立mybackup.bat,输入以下内容直接运行该脚本,即可开始自动备份数据库也可把该脚本加入windows任务计划里执行。@echooffsetpath=%path%;C:ProgramFilesMicrosoftSQLServer80ToolsBinnecho数据库备份开始>>E:DataBaseBAK任务计划完成记录.txtdate/t>>E:DataBaseBAK任务计划完成记录.txttime/t>>E:DataBaseBAK任务计划完成记录.txtisql.exe-S127.0.0.1-Usa-Psa-imybackup.sqlecho数据库备份完成>>E:DataBaseBAK任务计划完成记录.txtdate/t>>E:DataBaseBAK任务计划完成记录.txttime/t>>E:DataBaseBAK任务计划完成记录.txtecho.echo.echo.数据库备份完成echo.echo.rempause在同一个文件夹里,建立一个sql脚本:mybackup.sql内容如下:----------...
数据库操作教程 2022-09-23 17:44:51 -
SqlServer应用之sys.dm_os_waiting_tasks引发的疑问(上)
很多人在查看SQL语句等待的时候都是通过sys.dm_exec_requests查看,等待类型也是通过wait_type得出,sys.dm_os_waiting_tasks也可以看到session的等待那么有什么区别呢.... 废话不多说直接开整. 测试版本2012 sys.dm_os_waiting_tasks的字段说明:waiting_task_addressvarbinary(8)等待任务的地址。session_idsmallint与任务关联的会话的ID...
数据库操作教程 2022-09-23 17:44:21 -
SqlServer应用之sys.dm_os_waiting_tasks引发的疑问(中)
通过上篇文章给大家介绍了SqlServer应用之sys.dm_os_waiting_tasks引发的疑问(上),说了一下sys.dm_exec_requests和sys.dm_os_waiting_tasks在获取并行等待的时候得不同结果,这一篇我们谈论下我的第二个疑问:为什么一个并行计划(4线程)却一下出现了那么多等待,SQL的并行到底是怎么执行的!!!! 先贴以下上篇sys.dm_os_waiting_tasks的结果图: 我们分析一下这个结果的task_address可以看出去掉重复其实只有9个,也就是说一个并行(4线程,配置不同,情况也不同)会有9个task。又是线程,又是task,还有worker,schedulers这些都是什么?这个有必要先说一下,因为这篇博客前我也是乱乱的...
数据库操作教程 2022-09-23 17:44:07 -
SQLServer数据库bcp导出备份文件应用示例
/***授权*/EXECsp_configure'showadvancedoptions',1;goreconfigure;goexecsp_configure'xp_cmdshell',1;goreconfigure;go/**导入指定表的文本文件*/EXECmaster..xp_cmdshell'bcpdbname..tablenameind:DT.txt-c-Sservername-Usa-Ppassword'execmaster..xp_cmdshell'bcp"select*fromdbname..tablename"queryout"D:20140528.xls"-c-Sservername-Uuser-Ppassword'xp_cmdshell参数说明下面是我自己写的一个存储过程,可以直接拿去使用第一步,先要授权。上面有授权的SQL代码ifexists(select*fromsysobjectswheretype='p'andname='sp_export_posm_data')begindropproceduresp_export_posm_data;end;gocre...
数据库操作教程 2022-09-23 17:41:18 -
自增长键列统计信息的处理方法
这篇文章通过文字代码的形式讲解了如何处理用自增长键列的统计信息。我们都知道,在SQLServer里每个统计信息对象都有关联的直方图...
数据库操作教程 2022-09-23 17:40:01 -
SQLServer存储过程中编写事务处理的方法小结
本文实例讲述了SQLServer存储过程中编写事务处理的方法。分享给大家供大家参考,具体如下:SQLServer中数据库事务处理是相当有用的,鉴于很多SQL初学者编写的事务处理代码存往往存在漏洞,本文我们介绍了三种不同的方法,举例说明了如何在存储过程事务处理中编写正确的代码...
数据库操作教程 2022-09-23 17:39:34 -
sql中循环处理当前行数据和上一行数据相加减
以下事例,使用游标循环表#temptable中数据,然后让当前行和上一行中的argument1相加存放到当前行的argument2中,比较简单。--droptable#temptablecreatetable#temptable(argument1int,argument2int,argument3datetime)declare@rowcountint,@argument1int,@argument2nvarchar(50),@argument3datetimeset@rowcount=1set@argument1=1set@argument2=0set@argument3=GETDATE()while(@rowcount<100)begininsertinto#temptable(argument1,argument2,argument3)values(@argument1,@argument2,@argument3)set@argument1=@argument1+datepart(day,@argument3)set@argument3=@argument3-1set...
数据库操作教程 2022-09-23 17:38:36