数据库管理员

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

2
SQL Server 2016高空闲CPU和查询速度极慢
我安装了大约10天的WinServer2012R2和SQL Server Express 2016进行测试。我是这台机器上的唯一用户。从SQL Server 2005还原的.bak数据库约为250MB,不会出现任何问题。重新启动计算机后,进程“ SQL Server NT-64位”使用0%CPU。 在几分钟或几小时后,通过“ SQL Server NT-64位”的SSMS CPU使用情况进行的一些简单查询(无更新/插入!)突然跳到〜15%并保持在那里,即使处于空闲状态也是如此。从那时起,通常不到一秒钟的查询突然需要2分钟。在实际查询期间,CPU使用率不会增加。在这种状态下,服务器实际上变得不可用。 仅连接SQL Server Profiler会花费30秒以上的时间。除了我自己的查询外,我只看到很少的来自SQLServerCEIP / SQLTELEMETRY的查询,每分钟约3个。 重新启动SQL Server无法解决它。CPU使用率跃升至约15%。即使数小时后,SQL Server也无法恢复。仅重新引导整个计算机即可解决此问题。 由于这是“开箱即用”的安装,因此只有一个小的数据库,几乎没有查询,只有我作为用户,并且可能没有锁,许多有关常规SQL-Server性能问题的文章都谈到了很多不希望做的事情。在这里真的不适用。似乎SQL Server 仅希望专注于某些内部任务。 这是一个具有2GB RAM和2GHz双Xeon的虚拟机。我也有VS2016,而且速度非常快。没有防病毒软件,甚至没有Windows Defender。在这里已经晚了。我明天将尝试sp_whoisactive。我真的很想知道SQL-Server在那里做什么...在具有1 GB的以前的机器上,相同的数据库在SQLServer2005下运行了10年没有问题... 我不是SQL-Profiler专家。我应该从哪里开始寻找?

2
存储可能是多种类型的值的最佳方法
我想以更直接,更笼统的方式再问一个问题: 如何创建一个表来存储可能是多种不同类型的值? 就我而言,这些值提供有关事件的诊断。例如:事件发生->存储来自多个PLC的读数,其中包含有关事件的相关信息。PLC可以监视任何类型的数据。 我能想到的一些例子: 为每种可能的类型创建一列,并创建另一列以指示要使用的列 例如:列:IntVal,StrVal,BoolVal,类型。值:null,null,True,“ BOOL” 将值存储为varchar

3
为什么.bak文件大小随着SQL Server上的每个连续备份而增加/增加?
我在SQL Server 2012 Express上运行一个简单的数据库。 就在今天,当我备份数据库时,.bak文件大小增加了一倍,是几分钟前上次备份的大小。今天,我已经进行了几次备份(通过SQL Server Management Studio->备份类型:完整),并且每次备份.bak文件都会加倍。 在SQL Server Mgmt Studio中,当我右键单击数据库->“报告”->“备份和还原事件”->展开“成功备份操作”时: 此处的报告显示,最新备份大小记录为55MB,但是当我转到实际.bak文件时,它为260MB。今天.bak,彼此备份的大小也记录为55MB,而其相应文件的大小则是原来的几倍(并且随着每次备份操作的增加而增加)。 可能出什么问题了?自从发生这种情况以来,我还没有对数据库进行任何更改。

4
错误1236-“在二进制日志索引文件中找不到第一个日志文件名”
我们的设置: 大师:MariaDB 10.0.21 从站:MariaDB 10.0.17 复制工作一直很好,直到最近,此时必须从转储中还原从数据库。我执行了所有必要的步骤:转储主数据库,将转储转移到从数据库,删除旧数据库,执行转储以还原数据库,执行适当的CHANGE MASTER命令,最后执行START SLAVE。 我收到错误: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file' 从属服务器需要主服务器提供的第一个日志文件是mysql-bin.000289。我可以看到这存在于主服务器上: 我还可以看到,主数据库上的二进制日志索引似乎包含此日志文件的条目: 复制仍然无法正常进行-我一直收到相同的错误。我没有主意-接下来应该检查什么? 更新:SHOW SLAVE STATUS\G根据要求输出: MariaDB [(none)]> SHOW SLAVE STATUS\G -------------- SHOW SLAVE STATUS -------------- *************************** …

1
如何为不平等查询建立索引?
我有基于浮点列的值排除数据的查询 select * from My_Table where my_Float_column != 0 and my_Float_column is not null 如果可以,我不想为浮点型索引。执行计划是否足够聪明,可以使用如下所示的过滤索引(在这里我仅索引0和null值)以提高性能? CREATE NONCLUSTERED INDEX IX_My_Table_Float_Filtered ON My_Table (my_Float_column) WHERE my_Float_column = 0 or my_Float_column is null

1
检测到SQLHANDLE的可能的无限重新编译
我一直在sql错误日志中发现奇怪的错误消息: Bocss:每小时都会发生同样的僵局–需要调查 此外,按照以下示例,错误日志中还列出了许多其他SPID的重新编译内容: 2015年9月4日14:30:10,spid64,未知,为SQLHANDLE检测到可能的无限重新编译0x0200000059631A288882589E0C54B76404CAE1B97E08D368000000000000000000000000000000000000000000 PlanHandle 0x0600040059631A2860A62B654100000001000000000000000000000000000000000000600最后一次补偿是10:30/04/04:10:04/04 /结尾,spid150,未知,已检测到SQLHANDLE 0x02000000EF886F018C4E0B163812B8B20150FE8FC7E6A06A000000000000000000000000000000000000000000 PlanHandle 0x06000400EF886F01901A816E0600000001000000000000000000000000000000000000000000000000000000的可能无限重新编译,起始偏移量998Uncompute 09,20 09:09结束,偏移量2020是:0909结束时的偏移量2020:20,09:09结束,偏移量2030:0检测到可能无限的重新编译为SQLHANDLE 0x0200000057C4C632D9052275CFF2B683B80F29501EE91D730000000000000000000000000000000000000000 PlanHandle 0x0600040057C4C63200EAC2BE3000000001000000000000000000000000000000000000000000000000000000起始偏移1064结束偏移2652是2. 2015年9月4日14最后重新编译原因:30:09,spid163,未知,是为SQLHANDLE 0x02000000E7C7BF0E5D70DE55759C7842860272AD474D69AB0000000000000000000000000000000000000000 PlanHandle探测到一个可能无限的重新编译0x06000400E7C7BF0EF0EB68A52C00000001000000000000000000000000000000000000000000000000000000000000起始偏移量1028终止偏移量2580.上次重新编译的原因是2。 是什么原因造成的? 看来我已经没有计划在缓存中了。 按照这篇文章的建议 http://www.sqlservercentral.com/Forums/Topic1479420-146-1.aspx 然后作为一项安全措施禁用了全文目录,这没有什么区别,因此我完全回滚了更改(删除了新对象等)。这也没有什么不同,最终似乎唯一阻止它的是重启SQL实例,这立即解决了问题。 这样也可以解决我的问题,但是,我仍然首先要找出是什么原因造成了这种混乱?

4
如何合并具有不同有效日期的类似记录?
我正在处理的表包含三个部分: 一个ID柱(在另一个表中的主键) 一些数据列 日期有效from/ to列。 值: ID Data From To 1 a 2015-01-01 2015-01-05 1 a 2015-01-06 2015-01-10 1 b 2015-01-11 2015-01-15 1 a 2015-01-16 2015-01-20 2 c 2015-01-01 2015-01-05 2 c 2015-01-06 2015-01-10 通过以一定间隔获取另一个数据源的“快照”并将有效日期分配给记录来更新表。问题在于这些快照为记录(具有不同的有效日期)创建了重复的条目,这些记录在该时间间隔内根本没有更改。 我想通过查找具有连续日期的行并合并它们并为它们分配一个有效期来减小表的大小。例如: ID Data From To 1 a 2015-01-01 2015-01-10 1 b 2015-01-11 2015-01-15 1 a …

3
设置会话-用于存储用户ID的自定义变量
我想将用户ID存储在自定义会话变量中,并在触发过程中使用它(读取)来授权用户操作。我发现了这样的事情: set session "myapp.user" = '12345'; ... SELECT current_setting('myapp.user'); 似乎可行-我认为应在.conf文件中声明“ myapp.user”,但似乎可以即时创建会话变量(我根本没有更改.conf文件)。 这样做有什么缺点吗?


2
提交事务之前查询数据
我的理解是,在MS SQL Server Management Studio窗口中,执行“开始事务”然后进行一些更改(如将数据添加到表中)之后,您只能从同一窗口查询该表和那些更改,直到执行“提交交易”。 在执行“提交事务”之前,有什么方法可以从另一个来源进行查询吗? 具体到我当前的目标并添加一些上下文。我从Excel Power Query进行一些SQL查询。我真的很想能够在“提交事务”之前执行这些查询,以便我可以进行一些分析并弄清楚是否应该执行回滚而不是提交。

3
批量删除后,我需要重新索引mysql表吗?
我在MySQL中有一张表,每秒钟都有很多INSERT和SELECT。每天都会一次删除一些较旧的数据。删除后是否需要重新索引表?我想提高性能。有人可以建议一些技巧吗?使用“ innodb”作为存储引擎。我需要更改吗?我认为并发插入和选择更好。请提出您的建议。我需要重新编制索引吗? 提前致谢..

2
“签出”记录以进行处理的策略
我不确定是否有一个命名模式,或者没有,因为这是一个糟糕的主意。但是我需要我的服务才能在主动/主动负载平衡环境中运行。这仅是应用服务器。该数据库将位于单独的服务器上。我有一项服务,该服务将需要为表中的每个记录运行一个过程。此过程可能需要一到两分钟,并且每n分钟重复一次(可配置,通常为15分钟)。 拥有需要处理的1000条记录的表,以及针对同一数据集运行的两个服务,我希望每个服务“签出”要处理的记录。我需要确保一次只有一个服务/线程正在处理每个记录。 我的同事过去曾经使用过“锁定表”。将记录写入此表以在逻辑上锁定另一个表中的记录(该另一个表是静态的,并且添加了非常偶尔的新记录),然后将其删除以释放锁定。 我想知道对于新表来说,是否有更好的一列来表明它何时被锁定以及当前是否被锁定,而不是不断插入一个删除项,这会更好。 有人对这种事情有提示吗?是否有建立长期(逻辑)逻辑锁定的模式?如何确保一次仅锁定一项服务的任何提示?(我的同事使用TABLOCKX锁定整个表。)

1
PostgreSQL-如果同时运行多个查询,在什么情况下会加速?在什么情况下我会看到速度下降?
作为一个不是DBA的人,我会谦虚地对待你们,我敢肯定,我的问题充满了概念上的缺陷,并且“取决于”地雷。我也很确定,所有选择回答的人都希望在细节方面超出我目前的能力。 也就是说,我总体上对以下情况感到好奇: 假设我有两个非平凡的查询。 查询1平均需要2分钟才能完成。 查询2平均需要5分钟才能完成。 如果我连续运行它们,一个接一个地运行,那么我预计平均需要7分钟才能完成。这合理吗? 不仅如此,如果同时运行两个查询该怎么办?同时两个独立的连接。 我希望在什么情况下看到加速?(总时间<7分钟) 我预计在什么情况下会放缓?(总时间> 7分钟) 现在,如果我有1000个非平凡查询并发运行,我预感它将导致整体速度下降。在这种情况下,瓶颈可能在哪里?处理器?内存?开车吗 同样,我知道在不知道具体细节(我没有)的情况下,可能无法完全回答问题。我正在寻找一些一般性准则,以便在询问以下问题时考虑: 在什么情况下并发查询会导致整体加速? 在什么情况下并发查询会导致整体速度下降?

1
如何为PostgreSQL中的角色授予drop table / function特权?
我想将drop特定数据库的特定架构中的所有表和函数(不仅是用户拥有的那些)和特权授予特定角色。然而,GRANT ALL PRIVILEGES这还不够,我没有找到不让该角色成为超级用户的方法,怎么办-超级用户拥有同一服务器上其他数据库的权限,这不是我想要的。我不介意仅限于特定数据库的超级用户特权,但是我不确定该怎么做。 我的代码: CREATE USER _administrator PASSWORD 'pwd12345'; CREATE ROLE administrator NOLOGIN ADMIN _administrator; GRANT ALL PRIVILEGES ON DATABASE "myDB" TO administrator; GRANT ALL PRIVILEGES ON SCHEMA public TO administrator; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO administrator; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA …

3
计算列中的空值和非空值
如何在MySQL的同一列上计算和检索null和not null? mytable --------------------------------------------------- id | name | visited | registDate | --------------------------------------------------- 1 | george | NULL | 2014-04-01 | --------------------------------------------------- 2 | Thomas | NULL | 2014-04-15 | --------------------------------------------------- 3 | Wilfred | 1 | 2014-04-24 | --------------------------------------------------- 4 | paul | 1 | 2014-04-10 | --------------------------------------------------- 5 …
10 mysql  count  null 

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.