Pages: 7/12 First page Previous page 1 2 3 4 5 6 7 8 9 10 11 12 Next page Final page [ View by Articles | List ]
Mar 23

查询速度慢的原因很多,常见如下几种:

        
  1. 没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)
  2.     
  3. I/O吞吐量小,形成了瓶颈效应。
  4.     
  5. 没有创建计算列导致查询不优化。
  6.     
  7. 内存不足
  8.     
  9. 网络速度慢
  10.     
  11. 查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)
  12.     
  13. 锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)
  14.     
  15. sp_lock, sp_who, 活动的用户查看,原因是读写竞争资源。
  16.     
  17. 返回了不必要的行和列
  18.     
  19. 查询语句不好,没有优化
Mar 18
方法一:

方法二:

注:ROW_NUMBER() 在分页存储过程中也是比较好用的。
Feb 1

 SQL Server 2005复制(.可用性测试评估)

一、基本的功能测试:

DML操作同步:

1.有主键表的增//改数据同步(同步正常)

2.无主键表的增//改数据同步(无主键不能作同步复制,必须将每一张表加主键,否则无法配置到同步环境)

3.包含索引的表的增//改数据同步(同步正常)

4.包含触发器的表的增//改数据同步(如果A表包含有触发器,当增加记录时向B表插入数据,备库上会报错)

5.包含级连删除/修改数据的表的删/改数据同步 (同步正常)

6.包含大对象数据的表增//改数据同步(同步正常)

DDL操作同步:

.增加表(不能同步新增加的表及数据,但不会报错)

.删除表出错

drop table dbo.test

消息3724,级别16,状态2,第

无法对表' dbo.test ' 执行删除,因为它正用于复制。)

.修改表名出错

EXECUTE sp_rename N' dbo.test ', N'test1', 'OBJECT'

消息15051,级别11,状态1,过程sp_rename,第301 

该表已为了复制而被发布,所以无法重命名。)

.增加表索引 (不能同步索引,但不会报错)

.删除表索引  (不能同步索引,但不会报错)

.修改表索引  (不能同步索引,但不会报错)

7.增加表字段 (主DB增加字段会同步到复制DB

ALTER TABLE dbo.test ADD testcolumn NVARCHAR(20) null

8.删除表字段 (同步正常)

9.修改表字段  (同步正常)

10.存储程序类同步(有时会报错,需要进一步跟踪原因)

二、稳定性及同步监控测试

1 .发布服务器断网,sql server服务关闭,重启动,关机的时候,对已经设置好的复制没有多大影响 

  中断期间,分发和订阅都接收到没有复制的事务信息

2. 分发服务器断网,sql server服务关闭,重启动,关机的时候,对已经设置好的复制有一些影响。中断期间,发布服务器的事务排队堆积起来(如果设置了较长时间才删除过期订阅的选项繁忙发布数据库的事务日志可能会较快速膨胀), 订阅服务器会因为访问不到发布服务器,反复重试,我们可以设置重试次数和重试的时间间隔(最大的重试次数是9999, 如果每分钟重试一次,可以支持约6.9天不出错

分发服务器sql server服务启动,网络接通以后,发布服务器上的堆积作业将按时间顺序作用到订阅机器上:  会需要一个比较长的时间(实际上是生成所有事务的insert,update,delete语句,在订阅服务器上去执行)

3 .订阅服务器断网,sql server服务关闭,重启动,关机的时候,对已经设置好的复制影响比较大,需要重新初试化 

三、复制配置注意事项

1.如果想同步主DB上的非聚集索引,需要在主DB发布属性项目中对表点右键,选择设置所有表项目的属性,将复制非聚集索引设为true

2.DB发布属性项目中增加新的对象后,需要重新初始化快照,才能将新的对象同步。增加新的对象不需要重新初始化订阅

3.可以个性化的新建复制DB上的索引,当建立后要注意重新初始化订阅后,需要重新建立这些主DB上不存在的索引

4.具体事务复制延迟的时间受网络,事务并发等因素的影响,局域网内的事务复制一般情况下延迟在34秒左右,第一次初始化的时间较长,可以利用备份文件初始化。所以对于实时性要求高的业务逻辑不能依赖于复制DB

5.为了降低复制对主DB性能的影响,可以增加筛选仅复制需要的数据和字段;将订阅作为请求式的;独立分发服务器。

6. 通过使用事务复制或合并复制发布的表不能使用TRUNCATE TABLE语句,只能考虑使用DELETE 语句代替

四、复制DB的应用场景

关于复制数据库的使用,我设想了几种复制DB的应用场景:

(1.)作为开发人员日常查询只读数据库;

(2.)一般分析处理及统计数据的后台;

(3.)数据仓库和报表数据源;

(4.)可在复制DB上个性化的自定义一些索引针对某些应用的查询;

(5.)可以考虑将复制DB作为一些缓存数据或非实时性业务查询的数据源;

(6.)考虑利用复制DB改进每晚一些作业的处理。

(7.)可以考虑根据业务或用户的访问或者访问的实时性,将主数据库划分为多个分布式的数据库,这时复制作为实施分布式数据的一种方法,可以利用复制创建数据的副本

Jan 18
由于业务逻辑的多样性,经常得在sql server中查询不同数据库中数据,这就产生了分布式查询的需求

现我将开发中遇到的几种查询总结如下:


1.access版本

--建立连接服务器
EXEC sp_addlinkedserver
--要创建的链接服务器名称  
'ai',            
--产品名称              
'access',    
--OLE DB 字符
'Microsoft.Jet.OLEDB.4.0',  
--数据源
--格式:
-- 盘符:\路径\文件名
-- \\网络名\共享名\文件名  (网络版本)
'd:\testdb\db.mdb'
GO


--创建链接服务器上远程登录之间的映射
--链接服务器默认设置为用登陆的上下文进行
--现在我们修改为连接链接服务器不需使用任何登录或密码
exec sp_addlinkedsrvlogin 'ai','false'
go


--查询数据
select * from ai...mytable
go

Dec 11

 错误经过:

使用SQL2005导入数据,选择数据源为SQL2000的数据库在导入过程中出现的错误~

详细错误:

- 正在验证 (错误)
消息
错误 0xc0202049: 数据流任务: 无法在只读列“AreaID”中插入数据。
 (SQL Server 导入和导出向导)
 
错误 0xc0202045: 数据流任务: 验证列元数据失败。
 (SQL Server 导入和导出向导)
 
错误 0xc004706b: 数据流任务: “组件“目标 - _Global_AddressArea”(28)”验证失败,返回的验证状态为“VS_ISBROKEN”。
 (SQL Server 导入和导出向导)
 
错误 0xc004700c: 数据流任务: 一个或多个组件未能通过验证。
 (SQL Server 导入和导出向导)
 
错误 0xc0024107: 数据流任务: 任务验证期间出错。
 (SQL Server 导入和导出向导)

解决方案:

在数据库导入"选择源表和源视图"->点击对应表后的“编辑映射”按钮->勾选“启用标识列插入”->导入即可。

Nov 14
Nov 7
数据库中有个表classmate字段id长度不够用,原长度是varchar(10),现在要加到20
使用:alter table classmate alter column id varchar(20) 报错
解决方案:
1、查看该字段有关的主键,约束,索引,统计信息,如果用则在相关的上面右键 drop或create到剪贴板,先删除再建立;
2、在表上查看依赖项确定没有其他视图,存储过程受影响;
3、重要表做好备份工作!
Oct 22
Highslide JS
大家在写查询时,为了性能,往往会在表后面加一个nolock,或者是with(nolock),其目的就是查询是不锁定表,从而达到提高查询速度的目的。

什么是并发访问:同一时间有多个用户访问同一资源,并发用户中如果有用户对资源做了修改,此时就会对其它用户产生某些不利的影响,例如:

1:脏读,一个用户对一个资源做了修改,此时另外一个用户正好读取了这条被修改的记录,然后,第一个用户放弃修改,数据回到修改之前,这两个不同的结果就是脏读。

2:不可重复读,一个用户的一个操作是一个事务,这个事务分两次读取同一条记录,如果第一次读取后,有另外用户修改了这个数据,然后第二次读取的数据正好是其它用户修改的数据,这样造成两次读取的记录不同,如果事务中锁定这条记录就可以避免。

3:幻读,指用户读取一批记录的情况,用户两次查询同一条件的一批记录,第一次查询后,有其它用户对这批数据做了修改,方法可能是修改,删除,新增,第二次查询时,会发现第一次查询的记录条目有的不在第二次查询结果中,或者是第二次查询的条目不在第一次查询的内容中。

为什么会在查询的表后面加nolock标识?为了避免并发访问产生的不利影响,SQL Server有两种并发访问的控制机制:锁、行版本控制,表后面加nolock是解决并发访问的方案之一。

1> 锁,每个事务对所依赖的资源会请求不同类型的锁,它可以阻止其他事务以某种可能会导致事务请求锁出错的方式修改资源。当事务不再依赖锁定的资源时,锁将被释放。

锁的类型:1:表类型:锁定整个表;2:行类型:锁定某个行;3:文件类型:锁定某个数据库文件;4:数据库类型:锁定整个数据库;5:页类型:锁定8K为单位的数据库页。

锁的分类还有一种分法,就是按用户和数据库对象来分:

1). 从数据库系统的角度来看:分为独占锁(即排它锁),共享锁和更新锁
Pages: 7/12 First page Previous page 1 2 3 4 5 6 7 8 9 10 11 12 Next page Final page [ View by Articles | List ]