数据库管理员

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

2
动态更改为innodb_flush_log_at_trx_commit
这与这个问题有关。它确实有助于为InnoDB表获得更好的性能。 根据MySQL手册,innodb_flush_log_at_trx_commit是全局动态变量。因此,我可以使用SET GLOBAL命令更改它,但它似乎正在工作。 mysql> SET GLOBAL innodb_flush_log_at_trx_commit=2; Query OK, 0 rows affected mysql> SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit'; +--------------------------------+-------+ | Variable_name | Value | +--------------------------------+-------+ | innodb_flush_log_at_trx_commit | 2 | +--------------------------------+-------+ 1 row in set 但是,它并没有改变实际的MySQL设置。当我更新my.cnf并重新启动MySQL服务器时,它确实起作用了。因此,我不能在运行时更改全局变量吗? 我更喜欢默认值innodb_flush_log_at_trx_commit=1,但是我需要将其更改为2,然后才能运行恢复过程以使大型数据库更快地运行。但是,当过程完成后,我想将值更改回1。是否可以在运行时执行此操作? 我没有访问共享托管服务器上的my.cnf的权限。


2
如何在SQL Server内存和SQL Server Analysis Services内存之间取得平衡
我们有许多配置相同的系统 一台服务器(虚拟或物理) 运行SQL Server(SQL)和SQL Server Analysis Server(AS) 多核 16GB RAM 每天晚上,SQL Server将进行大约2-3个小时的处理,然后进行2-3个小时的AS处理。然后,整天只查询AS。 假设这是一台专用服务器,没有其他应用程序值得关注,并且两组处理是完全同步的-彼此之间始终没有重叠-我该如何最好地设置SQL和AS服务器的内存限制。 问的原因是,如果我不为SQL设置限制,它将获取所有可以使用的内存。但是-我的理解是,在以下情况下,SQL会很乐意放弃该内存: 它没有使用它 另一个服务/程序请求它。 因此,从逻辑角度来看,我相信允许SQL采取所需的一切,但我对AS'不太确定TotalMemoryLimit。我不确定AS是否会放弃它的内存。实际上,阅读更多使我相信,让一切全部使用是错误的。 这是否意味着我实际上需要为两者设置限制?我对最佳实践应该是什么以及在考虑过程不重叠的情况下我们需要衡量的问题感到困惑。 希望这是有道理的。

1
SQL Server缓存刷新和磁盘I / O
我们正在忙于负载测试我们在.NET 4.0中开发的OLTP系统,并在后面运行SQL Server 2008 R2。该系统使用性能非常出色的SQL Server Service Broker队列,但是在处理过程中我们遇到了一种特殊的趋势。 SQL Server处理请求的速度为1分钟,然后增加磁盘写入活动的时间约20秒。下图说明了该问题。 Yellow = Transactions per second Blue = Total CPU usage Red = Sqlsrv Disk Write Bytes/s Green = Sqlsrv Disk Read Bytes/s 在故障排除期间,我们尝试了以下操作,但模式没有任何重大变化: 停止SQL Server代理。 几乎杀死了所有其他正在运行的进程(没有A / V,SSMS,VS,Windows资源管理器等) 删除了所有其他数据库。 禁用所有对话计时器(我们不使用任何触发器)。 从消息队列驱动的方法转移到简单/粗略的表监视设计。 从轻到重使用了不同的负载。 修复了所有死锁。 似乎SQL Server可能正在建立其缓存并以特定的基于时间的时间间隔将其写入磁盘,但是我找不到任何在线资源来支持该理论。 接下来,我计划将解决方案移至我们专用的测试环境,以查看是否可以重现问题。在此期间的任何帮助将不胜感激。 Update 1 根据要求,提供一个图形,其中包括Checkpoint Pages …

1
为什么在触发器中没有出现变异表错误?
众所周知(或至少是这样),您不能在触发器内的变异表上使用DML语句。Oracle文档摘录: 变异表是由UPDATE,DELETE或INSERT语句修改的表,或者是可能由DELETE CASCADE约束的影响而更新的表。 发出触发语句的会话无法查询或修改变异表。此限制可防止触发器看到不一致的数据集。 但是,我无法理解为什么当我insert into emp使用SQL Developer或SQL * Plus 执行此演示触发器时不会出现“突变表”错误: CREATE OR REPLACE TRIGGER emp_bri BEFORE INSERT ON emp FOR EACH ROW BEGIN SELECT max(id) + 1 INTO :NEW.id FROM emp; UPDATE emp SET salary = 5000; END emp_bri; 插入成功完成并显示下一个id值,并更新所有emp记录。我正在使用Oracle Database 11g企业版11.2.0.1.0。我已经阅读了有关复合触发器的信息,但样本未使用它们。

1
带函数调用的估计查询计划与实际查询计划
我在SQL Server上有此查询,这是一个合并复制查询: SELECT DISTINCT b.tablenick, b.rowguid, c.generation, sys.fn_MSgeneration_downloadonly ( c.generation, c.tablenick ) FROM #belong b LEFT OUTER JOIN dbo.MSmerge_contents c ON c.tablenick = b.tablenick AND c.rowguid = b.rowguid; 估计的查询计划包括有关3个查询的信息: 上面的查询 函数调用fn_MSgeneration_downloadonly 对fn_MSArticle_has_downloadonly_property的函数调用 实际的查询计划仅包含以下信息: 上面的查询 与功能无关。为什么实际计划中缺少功能信息? 我尝试了以下选项: SET STATISTICS PROFILE ON SET STATISTICS XML ON 它创建了一个实际计划,但缺少第2部分和第3部分,与我在Management Studio中使用实际查询计划选项时相同。 例如,如果我要使用Profiler捕获有关函数调用的信息,我将选择哪些事件? 找不到与查询计划特别相关的答案,但我分析了SP:StmtStarting和SP:StmtCompleted并显示了函数调用。

2
SQL Server备份失败。错误:3041,严重性:16,状态:1
首先,我是stackexchange的新手,所以请多多包涵。 我正在运行SQL Server 9.0.4060。 我的问题是:我的SQL Server备份在很多数据库上一直失败。 维护计划将运行到不同的备份作业: 每天20:30进行DIFF备份,每个星期日在20:30进行完全备份。 我在无法完成备份的foreach数据库中遇到以下两个错误: Date 06-11-2012 20:31:06 Log SQL Server (Current - 07-11-2012 11:43:00) Source Backup Message BACKUP failed to complete the command BACKUP DATABASE (dbname) WITH DIFFERENTIAL. Check the backup application log for detailed messages. Date 06-11-2012 20:31:06 Log SQL Server (Current - 07-11-2012 …

1
SQL Server Snapshot复制是每次完全复制数据还是发出增量?
我正在看两台服务器之间的快照复制。这是我所拥有的: 500GB数据库 每晚约500MB bcp负载 每天约50MB的交易 我正在询问公司中的其他DBA有关使用哪种复制类型的信息。有人告诉我使用快照复制。但是,据我了解并一直在阅读,每晚加载快照后,快照将完全将数据库复制到分发服务器,然后完全覆盖其他服务器。 快照是按增量运行还是每次都完整复制?

4
MySQL InnoDB甚至在READ COMMITTED中也将主键锁定在删除状态
前言 我们的应用程序运行多个线程,这些线程DELETE并行执行查询。这些查询会影响隔离的数据,即,不可能存在并发DELETE发生在来自不同线程的同一行上。但是,对于每个文档,MySQL DELETE均对语句使用所谓的“下一个键”锁定,该锁定既锁定匹配键又锁定一些间隙。这会导致死锁,我们发现的唯一解决方案是使用READ COMMITTED隔离级别。 问题 执行DELETE具有JOINs个大表的复杂语句时会出现问题。在特定情况下,我们有一个带有警告的表,该表只有两行,但是查询需要从两个单独的INNER JOINed表中删除属于某些特定实体的所有警告。查询如下: DELETE pw FROM proc_warnings pw INNER JOIN day_position dp ON dp.transaction_id = pw.transaction_id INNER JOIN ivehicle_days vd ON vd.id = dp.ivehicle_day_id WHERE vd.ivehicle_id=? AND dp.dirty_data=1 当day_position表足够大时(在我的测试案例中有1448行),那么即使使用READ COMMITTED隔离模式的任何事务也会阻塞整个 proc_warnings表。 这个问题始终重现这个样本数据- http://yadi.sk/d/QDuwBtpW1BxB9都在MySQL 5.1(在59年1月5日检查)和MySQL 5.5(在MySQL 5.5.24检查)。 编辑:链接的示例数据还包含查询表的架构和索引,为方便起见,在此处复制: CREATE TABLE `proc_warnings` ( `id` int(11) NOT NULL AUTO_INCREMENT, …

2
SQL Server 2012可用性组是否为“ AlwaysON”?
在传统的SQL Server群集中,当发生故障转移时,连接到SQL Server失败实例的所有客户端都会失去连接,并且每个客户端都必须重新建立与故障转移群集实例的新连接。 AlwaysON可用性组是否可以缓解此问题?如果SQL Server 2012 AlwaysON可用性组的故障转移对连接到SQL Server的客户端透明吗?

2
将已发布的复制数据库的数据库兼容性级别从90更改为100的影响
我有一台SQL Server 2008 R2服务器,其中有一堆已发布的数据库,这些数据库当前在兼容级别90(2005)下运行。 订阅数据库也是SQL Server 2008 R2,但是目标数据库设置为兼容性级别100,并且复制工作正常。 如果更改发布数据库的兼容性级别,它将以任何方式影响复制,还是只是重新初始化所有订阅并重新启动复制的情况? 我怀疑更改已发布的数据库兼容性级别可能会稍微更改复制存储过程的功能,但是我不确定100%。 是这样吗

3
SQL Server 2008日期时间索引性能错误
我们使用的是SQL Server 2008 R2,它有一个很大的表(100M +行),带有主ID索引,而一datetime列则具有非聚集索引。基于使用专门用于索引datetime列的order by子句,我们看到了一些非常不寻常的客户端/服务器行为。 我通读了以下帖子:https : //stackoverflow.com/questions/1716798/sql-server-2008-ordering-by-datetime-is-too-slow, 但是客户端/服务器上发生的事情比实际发生的更多在这里开始描述。 如果我们运行以下查询(已编辑以保护某些内容): select * from [big table] where serial_number = [some number] order by test_date desc 查询每次都会超时。在SQL Server Profiler中,执行的查询在服务器上看起来像这样: exec sp_cursorprepexec @p1 output,@p2 output,NULL,N'select * ..... 现在,如果将查询修改为: declare @temp int; select * from [big table] where serial_number = [some number] order …

3
数据库始终以恢复模式启动
每次我重新启动服务器时,数据库始终处于恢复模式,并且正常运行大约需要20分钟。这总是并且仅在重新启动服务器时发生,所以我有几个问题... 有人告诉我这可能是由于日志文件过大引起的?正确吗?如果没有,那么其他原因可能是什么? 我需要减少日志文件的空间以防止恢复。哪个更好:缩小还是截断? 如何缩小或截断日志文件/数据库以减小大小?语法是什么? 我目前正在使用Microsoft SQL Server 2008。

1
不屈服的IOCP侦听器
有人知道“不屈服的IOCP侦听器”指示什么吗? 在我们的SQL Server中,只有一个错误检查转储: ===================================================================== BugCheck Dump ===================================================================== This file is generated by Microsoft SQL Server version 9.00.5292.00 upon detection of fatal unexpected error. Please return this file, the query or program that produced the bugcheck, the database and the error log, and any other pertinent information with a Service Request. …


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.