数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

1
请求使用SQL Server进行慢速DELETE的说明
我想对SQL Server删除行为获得一些额外的见解/理由。我们有一个相当大的数据库,超过1800 GB。 在其中有一些非常浅的表(只有几个整数列),具有数百万行。当我们从这些浅表中删除10,000行时,删除查询通常非常快(最多几秒钟)。 我们还有一个表,其中的类型字段image存储平均100 KB的图像。当我们仅从该表中删除几千行时,则需要一分钟多的时间。 尽管区别很明显(删除了更多的按大小分配的数据),但我还是渴望了解更多有关SQL Server内部发生的情况。这样我才能更好地理解后者的删除速度要慢得多。 谁能给我一些启示?

1
为什么UNPIVOT在兼容级别80 DB上工作?
我正在尝试在兼容级别80上运行的SQL Server 2008 SP3数据库上使用UNPIVOT提取数据。这应该意味着UNPIVOT无法正常工作,但在某些情况下,它确实可以正常工作... 作品: 形式的独立SELECT查询: SELECT...FROM...UNPIVOT...WHERE...GROUP BY 不起作用: 同一查询,位于LEFT JOIN ()同一服务器内不同数据库的其他表上。全部处于兼容级别80。 我收到通常的错误消息: Msg 325, Level 15, State 1, Line 165 Incorrect syntax near 'UNPIVOT'. You may need to set the compatibility level of the current database to a higher value to enable this feature. See help for the SET …

3
MySQL中两个具有相同名称的表
今天,我放下一张临时桌子时遇到了这个奇怪的问题。我删除了临时表,然后对表进行了描述以进行验证。但是,该表未删除。经过一番搜索,我发现: MySQL允许创建一个与永久表同名的临时表。因此临时表被删除,而不是永久表。我对正在使用哪张桌子感到非常困惑。 MySQL版本:5.1.36-enterprise-gpl-pro-log 这是我测试过的: mysql> create table test(id int); Query OK, 0 rows affected (0.00 sec) mysql> desc test; | Field | Type | Null | Key | Default | Extra | -------------------------------------------------- id int(11) YES NULL mysql> create temporary table test(id int); Query OK, 0 rows affected (0.00 sec) …
8 mysql  table 

1
将Oracle12C客户端与Oracle11.g数据库一起使用
我一直在使用Oracle12c客户端连接到远程服务器中的Oracle11g数据库约一个月,直到本周开始出现错误时,它才给我带来任何问题: The Network Adapter could not establish the connection Provider Code 17002 首先,我使用Oracle Sql Developer设计数据库表,然后一周,我开始使用Visual Studio 2013开发应用程序,在那里我使用本地适配器和库Oracle.DataBase.Client作为oracle提供的Visual Studio集成工具的一部分。与他们的数据库一起工作。 我想知道错误是否可能是因为客户端是12c,数据库是11g,或者这个问题无关紧要,并且可能正在发生其他事情。

2
使用COALESCE(…)优化子查询的选择
我在应用程序中使用的视图很大。我认为我已经缩小了性能问题,但是不确定如何解决。视图的简化版本如下所示: SELECT ISNULL(SEId + '-' + PEId, '0-0') AS Id, *, DATEADD(minute, Duration, EventTime) AS EventEndTime FROM ( SELECT se.SEId, pe.PEId, COALESCE(pe.StaffName, se.StaffName) AS StaffName, -- << Problem! COALESCE(pe.EventTime, se.EventTime) AS EventTime, COALESCE(pe.EventType, se.EventType) AS EventType, COALESCE(pe.Duration, se.Duration) AS Duration, COALESCE(pe.Data, se.Data) AS Data, COALESCE(pe.Field, se.Field) AS Field, pe.ThisThing, se.OtherThing …

2
为所有用户创建的数据库设置简单的恢复模式并收缩日志文件
希望您能指出正确的方向。我不是T-SQL的经常用户,但是我做了一些Google搜索,并在下面找到了脚本。我纠正了一下脚本。 我希望脚本执行以下操作: 选择除系统数据库之外的所有数据库。 要将恢复设置为简单。 收缩每个db(.ldf)的日志文件,系统db除外 剧本: USE MASTER declare @isql varchar(2000), @dbname varchar(64) declare c1 cursor for select name from master..sysdatabases where name not in ('master','model','msdb','tempdb','ReportServer','ReportServerTempDB') open c1 fetch next from c1 into @dbname While @@fetch_status <> -1 begin select @isql = 'ALTER DATABASE @dbname SET RECOVERY SIMPLE' select @isql …

2
在计算字段上创建索引:字符串或二进制数据将被截断
我有一个Foo包含以下字段的表: ID bigint not null identity(1,1), SerializedValue nvarchar(max), LongValue as TRY_CAST(SerializedValue as bigint) 现在,我想在LongValue上创建一个索引,以便可以轻松地查找表示数字的序列化值。 create nonclustered index IX_Foo on Foo(LongValue); 这会向我吐出以下错误: 字符串或二进制数据将被截断。 是的,SerializedValue中有现有数据。但是,祈祷可以通过在计算字段上创建索引来截断什么呢?

1
如何从PostgreSQL的JSON []数组中删除已知元素?
我面临有关在PostgreSQL中使用JSON数据类型的问题。我试图实现在数据库中存储非规范化的Java模型。该模型具有复杂对象列表。因此,我决定在本地PostgreSQL数组中将其建模为JSON。 这是我的表创建语句的摘要: CREATE TABLE test.persons ( id UUID, firstName TEXT, lastName TEXT, communicationData JSON[], CONSTRAINT pk_person PRIMARY KEY (id) ); 如您所见,这是一个具有JSON中通讯数据对象列表的人。这些对象之一可能看起来像这样: {"value" : "03334/254147", "typeId" : "ea4e7d7e-7b87-4628-ba50-6a5f6e63dbf6"} 我可以使用PostgreSQL的array_append轻松地将这样的JSON对象附加到数组。但是,我无法从数组中删除已知值。考虑一下这个SQL语句: UPDATE test.persons SET communicationData = array_remove( communicationData, '{"value" : "03334/254147", "typeId" : "ea4e7d7e-7b87-4628-ba50-6a5f6e63dbf6"}'::JSON ) WHERE id = 'f671eb6a-d603-11e3-bf6f-07ba007d953d'; 失败ERROR: could not identify …

4
存储数以百万计的行的非数字化数据还是某些SQL魔术?
我的DBA经验远不止于简单存储+检索CMS样式数据,还有很多,所以这可能是一个愚蠢的问题,我不知道! 我遇到一个问题,我需要查询或计算特定时间段内特定群体人数和特定天数的假期价格。例如: 一月份任何时候可供4人入住2晚的酒店客房多少钱? 我有像这样存储的5000家酒店的价格和空房数据: Hotel ID | Date | Spaces | Price PP ----------------------------------- 123 | Jan1 | 5 | 100 123 | Jan2 | 7 | 100 123 | Jan3 | 5 | 100 123 | Jan4 | 3 | 100 123 | Jan5 | 5 | 100 123 …

3
如何创建具有相同约束和索引的新表?
我正在创建一个具有主键约束和该表中的非聚集索引的新表。 我知道,我想创建另一个具有相同结构和值以及键和索引的表。 create table Dummy (id integer ,name varchar(20),salary integer Constraint PK_Con_id primary key(id)) insert into Dummy values(11,'AAA',1000); insert into Dummy values(12,'BBB',2000); insert into Dummy values(13,'CCC',3000); insert into Dummy values(14,'DDD',4000); select * from Dummy; create nonclustered index IX_Name on Dummy(Name) 现在,我正在创建Dmy表,但是“键和约束”未反映Dmy在SQL Server 2008 R2的表中。 SELECT * INTO Dmy FROM Dummy


5
SQL Server 2012永远在线备份,完全备份与仅复制
我需要快速说明仅复制备份还是完全备份,因为它与事务日志编号和还原有关(如果需要)。 我有始终打开多个数据库的SQL Server 2012安装程序。可用性组是使用副本上的首选备份设置的。 副本上只能进行仅复制和事务日志备份。这是否意味着如果需要还原事务日志,则需要在主数据库上进行完整备份吗? 谢谢

2
MySQL为什么要进行串行同步I / O?
当在MyISAM表上查看一个特别烦人的查询时,在许多情况下要花很长时间才能执行,我注意到MySQL似乎暴露出一种相当奇怪的I / O模式:执行单个查询时,必须要做很多事情I / O量(例如,对于表扫描或由于高速缓存而导致缓存为空,echo 3 > /proc/sys/vm/drop_caches因此需要首先从磁盘加载索引)时,基础块设备的队列大小接近于值1,而性能则极差仅4-5 MB / s: root@mysql-test:~# iostat -xdm 5 /dev/sda Linux 3.2.0-40-generic (mysql-test) 04/30/2014 _x86_64_ (4 CPU) Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.14 24.82 18.26 88.79 0.75 4.61 102.56 2.83 26.39 19.29 27.85 2.46 …

1
三元关系:拥有一个表和拥有多个表有什么区别?
考虑以下三元关系: 假设所有实体只有两个属性(PK和名称)。 这是我导出的表(5个表): Sector ------------------------- ID_Sector SectorName ------------------------- Product ------------------------- ID_Product ProductName ------------------------- Company -------------------------------------- ID_Company ID_Sector CompanyName -------------------------------------- Relationship 1 (R1) ------------------------- ID_Sector ID_Product ------------------------- Relationship 2 (R2) ------------------------- ID_Company ID_Product ------------------------- 题: 对于这种三元关系,这是一个好的解决方案吗?有2个表(R1和R2)而不是下面的单个表有什么区别: Ternary table ------------------------------------- ID_Sector ID_Company ID_Product ------------------------------------- 在我看来,与每个关系(R1和R2)有两个单独的表相比,有一个表是一个更好的解决方案,但是我不知道这是否是真的,或者这是一个好习惯。

2
间歇性RESOURCE_SEMAPHORE_QUERY_COMPILE等待统计
我正在尝试解决一些生产SQL Server上出现的间歇性CPU高峰问题。我们正在运行具有28 GB RAM和4个CPU内核的SQL Server 2008 R2标准版。发生这种情况时,我们注意到大量的RESOURCE_SEMAPHORE_QUERY_COMPILER等待,持续约一两分钟,然后停止,然后CPU使用率恢复正常。 经过研究后,我了解到这通常是由于编译了许多不可重用的执行计划而引起的,我们目前正在对应用程序进行更改以解决该问题。 由于内存压力,计划缓存逐出也会触发此行为吗?如果是这样,我将如何检查?我正在尝试查看是否有可以做的短期补救措施,例如升级服务器RAM,直到我们部署应用程序修补程序为止。我能想到的唯一其他短期选择是将某些最繁忙的数据库移至其他服务器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.