Questions tagged «database-tuning»

通过调整数据库参数或数据库的物理布局来完成性能调整。

2
在哪里可以找到学习数据库的调优练习?
作为开发人员,DBA通常负责在数据库级别解决性能问题,因此我们在诊断,调整,重构查询等方面经验不足。 我正在寻找一个包含一堆表,数据,查询,触发器,SP等的数据库,其中存在故意的性能问题,希望有一系列练习可以尝试识别和解决这些问题。理想情况下,它将在MS SQL服务器上。 有人知道这种事吗?

4
我怎样才能知道为什么在某个表上插入会很慢?
我知道,出于多种原因,在SQL表上执行INSERT操作可能会很慢: 桌子上是否存在INSERT TRIGGER 许多必须检查的强制约束(通常是外键) 当在表的中间插入一行时,页面在聚集索引中拆分 更新所有相关的非聚集索引 阻止桌面上的其他活动 IO写响应时间差 ...我错过了什么? 如何确定我的具体情况中哪个责任人?如何衡量分页与非聚集索引更新与其他所有内容的影响? 我有一个存储的过程,一次插入大约10,000行(从临时表中),每10k行大约需要90秒。这太慢了,因为它会导致其他sps超时。 我已经查看了执行计划,并且看到了INSERT CLUSTERED INDEX任务和FK查找中的所有INDEX SEEKS,但仍不能确定为什么要花这么长时间。没有触发器,但是表中确实有少数FKey(似乎已正确索引)。 这是一个SQL 2000数据库。

2
MySQL在磁盘上创建临时表。如何停止?
我们正在运行一个用户当前发现缓慢的网站(Moodle)。我认为我已将问题归结为MySQL在磁盘上创建临时表。我created_tmp_disk_tables在Mysql Workbench服务器管理中观察该变量,并且该数目以大约50个表/秒的速度增加。使用几天后,created_tmp_disk_tables> 100k。此外,似乎没有释放内存。使用率一直在增加,直到系统变得几乎无法使用为止,我们必须重新启动MySQL。我几乎每天都需要重新启动它,首先要使用大约30-35%的可用内存,然后以80%的时间结束一天。 我在数据库中没有斑点,也无法控制查询,因此我无法尝试对其进行优化。我还使用了Percona Confirguration向导来生成配置文件,但是my.ini也不能解决我的问题。 问题 我应该怎么做才能阻止MySQL在磁盘上创建临时表?是否需要更改设置?我应该为此增加更多的内存吗? 如何阻止MySQL耗尽内存? 编辑 我启用了slow_queries日志,发现查询SELECT GET_LOCK()记录得很慢。快速搜索显示,我已允许PHP配置(mysqli.allow_persistent = ON)中的持久连接。我关闭了 这降低了MySQL占用内存的速度,尽管它仍在创建临时表。 我还检查了key_buffer size是否足够大。我看着变量key_writes。应该为零。如果不是,请增加key_buffer_size.I为零key_reads和零,key_writes因此我假设key_buffer_size足够大。 我将tmp_table_size和max-heap-table-size增加到1024M,因为created_tmp_disk_tables的增加可能表示表无法容纳在内存中。这没有解决。 参考:http : //www.mysqlperformanceblog.com/2007/08/16/how-much-overhead-is-caused-by-on-disk-temporary-tables/ 编辑2 如果sort_merge_passes在SHOW GLOBAL STATUS输出中看到每秒很多,则可以考虑增加该sort_buffer_size值。我sort_merge_passes一个小时有2个,所以我认为sort_buffer_size足够大了。 参考:Mysql手册 sort_buffer_size 编辑3 我已经按照@RolandoMySQLDBA的建议修改了排序和联接缓冲区。结果显示在下表中,但我认为created_tmp_tables_on_disk仍然很高。我更改了值并检查created_tmp_tables_on_disk了一天(8h)后并计算平均值后,重新启动了mysql服务器。还有其他建议吗?在我看来,有些东西不能放入某种容器中,但是我无法弄清楚它到底是什么。 +---------------------+-------------+-------------+--------------------+ | Tmp_table_size, | Sort_buffer | Join_buffer | No of created | | max_heap_table_size | | | tmp_tables on disk | +---------------------+-------------+-------------+--------------------+ …

2
设计用户认证(角色和权利)模块
我正在尝试为MS SQL Server数据库建模用户身份验证模块,该模块将成为Delphi UI应用程序的后端。基本上,我想拥有一个用户帐户,其中该用户仅属于一个组。一个组可以具有“ n”个权限。 我还想将密码历史记录添加到数据库中,因为将要求用户根据应用程序设置(例如,每90天)更改其密码。 我也想在用户每次登录和注销时都记录一个事件。我将来可能会将其扩展到其他事件。 在下面,您会发现我的第一个裂缝。请让我知道任何改进的建议,因为这是我第一次这样做。 您是否发现需要其他属性以实现基于角色的安全性以及密码规则/有效期限的约束?

3
MySQL table_cache和Opened_tables
我已经看到人们使用Open_tables和Opened_tables的比较来评估table_cache在MySQL中是否太小。但是,我相信Opened_tables在正常运行时间内是累积的,因此这不是有效的比较。唯一需要注意的是,也许Opened_tables只会在未命中时发生碰撞-尽管即使每秒打开的表仍然很小,但逐渐增长它也不是问题。 如果将Open_tables与Opened_tables比较无效,是否还有另一种方法来获取测量数据? 这是在MySQL 5.0上,但也欢迎版本之间存在差异。

2
SELECT TOP 1会损害查询性能;有没有dba可访问的方法来克服这个问题?
在生产应用程序(C#与SQL Server 2014 Standard对话)中,下面是一个查询,如下所示。大多数情况下,它以毫秒为单位运行。但是有时(对于的某些值@Id)会变得很疯狂,并且需要一分钟左右的时间。这比应用程序超时时间长,因此该应用程序对用户而言将失败。 在“疯狂”的情况下,返回的结果集正确地为空,就像在许多但并非所有其他情况下一样。 幸运的是,这在生产和开发环境中都是可重现的。 开发人员说,从查询中删除“ TOP 1”,然后确保应用消耗了结果集的多余行,从而清除了性能问题。 查询计划程序建议不存在索引TOP 1。(在dev中)。 正在进行更改查询和修复应用程序。推出需要一段时间。 我的问题:在采用新查询的应用程序更改推出之前,是否有任何DBA可访问的方法来调整或调整生产SQL Server实例以克服此问题? SELECT TOP 1 subscription_id FROM subscription AS sub JOIN billing_info AS bi ON bi.billing_info_id = sub.billing_info_id JOIN person_group AS apg ON apg.person_id = bi.person_id JOIN pplan ON pplan.plan_id = sub.plan_id JOIN product ON product.product_id = [plan].product_id …

2
SQL Server:是否有人使用大页面分配调整选项?
有没有人使用过使用的调整选项TF834 large page allocations。我只是在阅读有关它的MS文章,并且想知道是否有人使用过它并看到了性能提升。有什么需要注意的小窍门,陷阱吗? 该服务器是Windows 2008 64位,128 GB RAM,4个CPU 8核心超大型(总共64核心)SQL2005服务器。我希望调整服务器以更好地使用其规格,而不仅仅是使用当前已在其上完成的默认SQL安装。任何额外的提示都将受到欢迎。

3
从C#VS SSMS执行相同的请求会产生不同的执行时间
我有这样的要求 SELECT [EstimateId], [CreationUserId], [EstimateStatusValueId], [LanguageId], [LocationId], [EstimatorUserId], [FilterUnitSystemTypeId], [EstimateNumber], [RevisionNumber], [CreationDate], [ModificationDate], [ProjectDescription], [IsBsdq], [ClosingDate], [ClosingTime], [ClosingUpdatedOn], [DeadLineDate], [IsReceived], [Inclusion], [Exclusion], [Misc], [Note], [WorkDeadLines], [Comments], [Validity], [PlansLocation], [PlansReceivedFrom], [Price] FROM [Estimate].[Estimates] ORDER BY [ClosingDate] ASC, [ClosingTime] ASC 当我在SSMS中运行此查询时,我的执行时间为953ms,但是当我从C#中的Linq查询中运行此查询时,我的执行时间为1813ms。 Linq查询使用“ .Net SqlClient数据提供程序”,并针对EntityFramework(EDMX文件)发出。这可能是一个问题吗? 有谁知道为什么我在相同请求但针对同一数据库从不同上下文执行的那些请求的执行时间之间有很大差异? 我验证了两个请求的所有执行计划,并且它们使用相同的索引来满足各自的查询。 为了查看C#请求的执行计划,我使用SQL事件探查器捕获了Show Plan XML事件,并将其与SSMS之一进行比较,并且两者相同。

1
针对大量插入和bytea更新优化PostgreSQL
我们拥有(软件​​): 具有基本配置的PostrgeSQL 9.3(中没有更改postgresql.conf) Windows 7 64位 硬件: 英特尔酷睿i7-3770 3.9 GHz 32 Gb RAM WDC WD10EZRX-00L4HBAta驱动器(1000Gb,SATA III) 因此,我们必须加载到数据库aprox中。100.000.000行(带bytea列),以及更简单的500.000.000行(无LOB)。varchar在第一个表上有2个索引(长度为13、19),varchar在第二个表上有2 个索引(长度为18,10)。每个表还具有用于ID生成的序列。 到目前为止,这些操作是使用8个连接进行的,并具有5​​0个JDBC批处理大小。下图演示了系统负载:postgresql进程的负载为零。加载24小时后,我们仅加载了1000万行,这是非常缓慢的结果。 我们正在寻求有关调整PostrgreSQL配置的帮助,以实现以下目的: 1)为了超快地加载此数据量,这是一次操作,因此可以是临时配置 2)对于生产模式,通过它们的索引对这2个表进行适量的SELECT,而无需联接和排序。

1
由于数据移动,无法继续使用NOLOCK进行扫描
我们运行SQL Server 2000,并且每晚都有一些此类错误。 Could not continue scan with NOLOCK due to data movement 引发此错误的查询是一个大型的复杂查询,连接了十几个表。我们的基础数据可以经常更新。 文化上的“最佳实践”是,过去,引入NOLOCK提示可以提高性能并提高并发性。该查询不必是100%准确的,即我们可以忍受脏读等。但是,尽管我们拥有所有这些锁定提示,但我们仍在努力理解为什么数据库抛出此错误。 任何人都可以对此有所了解-彬彬有礼,我实际上是程序员,而不是DBA :) PS:我们已经应用了下面提到的修复程序:http : //support.microsoft.com/kb/815008


1
针对瞬时数据优化PostgreSQL
我有几张桌子,每张桌子都有100-300个整数类型的列,这些表保存高度易变的数据。数据集由一或两个主键进行键控,当刷新发生时,整个数据集将被删除,新数据将被插入到一个事务中。数据集的大小通常为几百行,但在极端情况下可以达到几千行。刷新每秒发生一次,并且通常不区分针对不同键的数据集更新,因此删除和重新创建表是不可行的。 如何调整Postgres以处理此类负载?如果有任何不同,我可以使用最新和最好的版本。

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.