数据库管理员

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

2
sp_executesql何时刷新查询计划?
您必须原谅我的天真,因为我不是DBA,但我的理解是,随着时间的推移,必须重新编译数据库更改和存储过程的统计信息,以使查询计划与最新的统计信息保持最新。 假设我的数据库中有一个存储过程,可以按一定的时间间隔对最新的统计信息进行重新编译,那么将存储过程内联到代码中并将其包装在sp_executesql语句中的含义是什么?在重新编译过程的过程中,是否会丢失对查询计划的刷新? 如果在进行此更改之前我还有其他需要考虑的事项(权限除外),那么感谢您的见解。 我在MSDN上阅读过: SQL Server查询优化器将新的Transact-SQL字符串与现有执行计划进行匹配的能力受到字符串文本中参数值不断变化的影响,特别是在复杂的Transact-SQL语句中。 因此,假设我尝试进行内联和包装的存储过程sp_executesql确实包含一些参数,这是否表示尽管我的执行计划已被缓存,但使SQL Server很难找到并重用它?

2
VACUUM FULL和CLUSTER之间的PostgreSQL区别
我有一个表,其中数据占用200 GB的大小,表上的6个索引占用180 GB的大小。它已膨胀了30%,所以我想回收它占用的多余空间。它聚集在job_id_idx索引上。 所以要回收空间,我需要使用clustercommand还是vacuum fullcommand? 这两个命令有什么区别? 是vacuum full为了通过一些列相同cluster的命令? 是否在两个命令中都重新创建了索引? 就我而言,哪一个会更快? PostgreSQL数据库版本为9.1

1
具有1个外部IP的Cassandra多数据中心配置
我正在尝试设置一个多数据中心Cassandra集群。问题是我的数据中心只有1个外部IP(WAN IP),我可以在数据中心交换机上设置端口转发,以使用不同的端口从外部世界访问每个节点,但是我不知道如何设置cassandra .yaml文件正确。 在这种情况下,是否有办法设置多数据中心cassandra集群? 提前致谢!
13 cassandra 

4
由于磁盘空间不足,无法为数据库分配新页面
使用SQL Server导入和导出向导,出现以下错误: 错误0xc0202009:数据流任务1:SSIS错误代码DTS_E_OLEDBERROR。 发生OLE DB错误。错误代码:0x80004005。 由于文件组“ PRIMARY”中的磁盘空间不足,无法为数据库“数据库”分配新页面。通过在文件组中放置对象,将其他文件添加到文件组或为文件组中的现有文件设置自动增长来创建必要的空间。 我正在尝试上传一系列2GB的文件,并且在加载第4个文件时,即使我转到“数据库属性”>“文件”,并将“文件组”的自动增长更改为2500 MB,并且最大容量不受限制,我仍然收到上述错误消息。 最好的解决方法是什么?这些数据最终将占用大约60-80GB。
13 sql-server 

4
通过网络批量插入
有人可以帮我这些吗? BULK INSERT DATABESE01.dbo.TABLE01 FROM '\\COMPUTER01\FOLDER01\TextFile.txt' WITH ( FIELDTERMINATOR = ' ', rowterminator = '\n', tablock ) 错误显示,无法打开: 无法批量插入,因为无法打开文件“ \ SERVERNAME \ FOLDERNAME \ textFile.txt”。操作系统错误代码5(访问被拒绝。) 该路径在网络上的另一台计算机上。

1
在SQLCMD模式下设置变量
使用SQL Server 2008 R2企业版 考虑以下语句: :setvar source_server_name "SERVERNAME\INSTANCENAME" 是否可以在SQLCMD模式下使用TSQL获得该值 就像是: :setvar source_server_name = SELECT @@servername 谢谢 更新7/15/2013 下面提供的两个答案并没有给出理想的结果,因此我添加了一个更相关的示例。 :setvar source_server_name [myserver] 变量source_server_name设置为文本字符串[myserver_1] 我希望能够做到这一点: create table #tmp( id int identity(1,1), server sysname ) insert into #tmp values('myserver_1'),('myserver_2'); :setvar source_server_name = SELECT server FROM #tmp WHERE id = 1 select '$(source_server_name)' (No …

2
更多的CPU核心与更快的磁盘
我是一家小公司的一员,因此像往常一样担任许多不同的职务。最新的一项是为.NET Web应用程序购买专用的SQL Server盒。我们已经引用了双Xeon E5-2620(六核)2.00 GHz CPU配置(总共12核),32 GB的RAM。这使我们在磁盘阵列上的预算有限,它实际上由RAID 1配置中的两个2​​.5英寸SAS 300 GB驱动器(15k RPM)组成。 我知道磁盘设置对于SQL Server来说不是最佳选择,我真的很想推动RAID 10,因此我们可以将数据库,日志文件和tempdb放在自己的驱动器上。为了使它与我们的预算兼容,我应该考虑减少CPU内核数吗?还是我会为保留内核并使用更少的驱动器而付出更多的钱,也许在双RAID 1设置中可以使用4个? 以下是一些其他统计信息 SQL Server数据库倾向于大量读写操作,分别可能是80%和20%。当前的DB大​​小目前约为10 GB 26 GB,并且以每月250 MB的速度增长。 当前运行在与Web服务器共享的单个四核Xeon盒上的SQL Server 2008 R2 Standard(12 GB Ram,RAID 1中的2 x 10k 300GB SAS驱动器)上,希望迁移到SQL Server 2012 Standard。 数据库可以为大约100-150个并发用户提供一些后台调度任务。阅读这篇文章,我认为12个内核严重过头了! 我将整个应用程序部署到链接到SQL Azure DB的Azure云服务(2个小实例)。尽管在测试时性能是合理的(几乎为零负载),但由于我已经读了太多的不可预测性,所以我失去了在生产中使用的勇气。使用横向扩展方法可能会更好,但是只有10 GB的数据库,我现在可以避免扩展并节省一些现金。 我最初忽略了许可成本,却没有意识到SQL Server 2012许可是基于内核数量的。我有一个带有SQL Server 2012 Standard许可证的BizSpark MSDN订阅,因此我需要了解开箱即用的几个内核。

2
将ExecutionInstanceGUID与SSISDB相关
SQL Server Integration Services的2012年发行版SSIS提供了一个SSISDB目录,该目录可跟踪程序包的操作(以及其他操作)。使用项目部署模型的解决方案的默认程序包执行将打开到SSISDB的日志记录。 程序包执行时,将System::ExecutionInstanceGUID使用一个值填充,如果使用显式日志记录(到sys.sysdtslog90/ sys.sysssislog)将记录特定程序包执行的所有事件。 我想知道的是如何将ExecutionInstanceGUID绑定到SSISDB目录中的任何内容。或者,是否以SSISDB的值执行SSIS包中的SSIS包catalog.executions.execution_id 最终,我尝试使用现有的自定义审核表,并将其链接回SSISDB目录中的详细历史记录,但似乎找不到链接。


2
为什么非数字喜欢[0-9]?
我的服务器的默认排序规则是Latin1_General_CI_AS,由以下查询确定: SELECT SERVERPROPERTY('Collation') AS Collation; 我很惊讶地发现,通过这种归类,我可以使用谓词匹配字符串中的非数字字符LIKE '[0-9]'。 为什么在默认排序规则中会发生这种情况?我想不出一个有用的例子。我知道我可以使用二进制排序规则来解决此问题,但这似乎是实现默认排序规则的一种奇怪方法。 过滤数字会产生非数字字符 我可以通过创建包含所有可能的单字节字符值的列并使用数字匹配谓词过滤值来演示此行为。 以下语句创建一个临时表,该表具有256行,在当前代码页中的每个代码点对应一个: WITH P0(_) AS (SELECT 0 UNION ALL SELECT 0), P1(_) AS (SELECT 0 FROM P0 AS L CROSS JOIN P0 AS R), P2(_) AS (SELECT 0 FROM P1 AS L CROSS JOIN P1 AS R), P3(_) AS (SELECT 0 …

1
哪个更好:加入条件多还是条件多?
我正在尝试比较两个查询: 查询1: SELECT a,b,c,d,e FROM tableA LEFT JOIN tableB ON tableA.a=tableB.a WHERE tableA.b=tableB.b AND tableA.c=tableB.c AND tableA.d=tableB.d AND tableA.e=tableB.e 查询2: SELECT a,b,c,d,e FROM tableA LEFT JOIN tableB ON tableA.a=tableB.a AND tableA.b=tableB.b AND tableA.c=tableB.c AND tableA.d=tableB.d WHERE tableA.e=tableB.e 我是否可以正确地说这两个查询给出相同的结果? 进一步说第一个查询建立一个更大的表并对其做更大的WHERE条件是否正确;而第二种情况是我们有一个较小的构造表,WHERE然后将其应用于简单表。 假设结果相同,则应首选哪个查询?是否存在明显的性能问题?

3
有没有一种方法可以确定SQL Server查询是在内存中运行还是在磁盘上运行?
今天,我在一个应用程序中遇到了一组存储过程,这些存储过程在长时间运行的过程中被重复调用。在每个过程中,我发现了多个不同的select语句,其中一些在循环内。毫不奇怪,当前使用的这些例程需要几分钟才能运行,而直觉会期望它们在几秒钟内完成。 似乎很明显,编写这些过程时并未考虑性能,因为有很多事例只是“一个不好的主意”。 导入数据时处理每一行需要花费300毫秒,因此处理相对较小的导入需要花费几分钟。 但是,过程中涉及的表大部分很小。我在想,如果所有这些表都完全驻留在内存中,那么重写任何这些表可能并没有获得太多。 我正在尝试确定....对于这个显然效率低下的代码,它有多少实际影响?值得修复吗? 所以问题是: -有没有办法确定哪些表完全固定在内存中? -是否有一种方法可以打开跟踪以监视嵌套的存储过程以查找特别昂贵的部分? 注意:这是在SQL Server 2008 R2上

4
我正在使用SQL Server代理计划甚至非数据库任务-这是一个坏主意吗?
由于我是DBA(在许多情况下,事实上是sysadmin),因此SQL Server几乎安装在我必须定期使用的每台服务器上。最近我意识到,在几乎每种情况下,我都一直在使用SQL Agent作为作业调度程序,而不是使用本机Windows Task Scheduler。 在我看来,与本地Windows Task Scheduler相比,SQL Agent具有许多优点: (从我的工作站)远程启动/停止/监视任务 共享时间表(而不是每个任务自己执行) 多个步骤和控制流程 不同类型的任务 失败/完成警报 可以配置为充当不同的用户 (适度)描述性错误消息,而不仅仅是错误代码 但是,我无法避免这种做法不好的感觉-尽管我不喜欢SQL代理的可用性,但应该仅将SQL Agent保留给与数据库相关的任务,并且应该让Windows任务计划程序中运行OS级别的任务。 以这种方式依赖SQL Agent可以吗?如果没有,我是否应该考虑使用第三方Windows任务计划程序来获得我正在寻找的某些功能?

5
分页如何与SQL Server中的ROW_NUMBER一起使用?
我有一张Employee有一百万条记录的表。我有以下用于在Web应用程序中分页数据的SQL。一切正常。但是,我认为是一个问题-派生表tblEmployee选择表中的所有记录Employee(以创建 MyRowNumber值)。 我认为,这将导致选择Employee表中的所有记录。 真的有效吗?还是对SQL Server进行了优化以从原始Employee表中仅选择5条记录? DECLARE @Index INT; DECLARE @PageSize INT; SET @Index = 3; SET @PageSize = 5; SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY EmpID asc) as MyRowNumber,* FROM Employee) tblEmployee WHERE MyRowNumber BETWEEN ( ((@Index - 1) * @PageSize )+ 1) AND @Index*@PageSize

1
ODBC数据源SQL Server连接-用户登录失败
我已将数据库从SQL 2005移至具有SQL 2008的服务器。 我现在正在尝试创建ODBC数据源。 我正在使用“通过SQL Server身份验证使用用户输入的登录ID和密码”,并且已经输入了我的登录名和密码。登录名在SQL Server Management Studio中的“安全性”->“登录名”下可见。 该登录名还包含我的旧服务器中同一登录名的确切属性。输入用户名和密码后,当我点击下一步时,我得到: Connection failed: SQLState: '28000' SQL Server Error: 18456 [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'myUser'. 阅读以下内容后:http : //support.microsoft.com/kb/555332我意识到服务器属性仅设置为“ Windows身份验证模式”,但是即使更改为“ SQL Server和Windows身份验证模式”,我仍然连接问题。我可以连接我的Windows帐户。

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.