标签: database-tuning

将图像存储在 BLOB 中还是仅存储在 URL 中更好?

可能的重复:
文件 - 在数据库中与否?

我想知道是否有任何充分的理由仍然在数据库中使用 blob 字段。几年前,我使用了一个包含一堆图像的数据库,该数据库非常慢,我看不出有什么好的理由将图像保存在数据库中,所以我将图像取出并存储了文件名反而。

这是明智之举吗?你代替我做什么?

database-tuning architecture

40
推荐指数
7
解决办法
4万
查看次数

在哪里可以找到用于学习的数据库调优练习?

作为开发人员,DBA 通常负责解决数据库级别的性能问题,因此我们在诊断、调优、重构查询等方面没有太多经验。

我正在寻找一个包含大量表、数据、查询、触发器、SP 等的数据库,其中存在故意的性能问题,并希望有一系列练习,您可以在其中尝试识别和解决问题。理想情况下,这将在 MS SQL 服务器上。

有人知道这种事情吗?

sql-server database-tuning

32
推荐指数
2
解决办法
2367
查看次数

MySQL 在磁盘上创建临时表。我该如何阻止?

我们正在运行一个网站(Moodle),用户目前发现它很慢。我想我已经将问题追溯到 MySQL 在磁盘上创建临时表。我created_tmp_disk_tables在 Mysql Workbench 服务器管理中观察了这个变量,这个数字以大约 50 个表/秒的速度增加。经过一天的使用,created_tmp_disk_tables是> 100k。此外,内存似乎没有被释放。使用量不断增加,直到系统变得几乎无法使用,我们必须重新启动 MySQL。我几乎每天都需要重新启动它,从使用大约 30-35% 的可用内存开始,并以 80% 结束一天。

我在数据库中没有 blob,也无法控制查询,因此我无法尝试优化它们。我还使用了Percona 配置向导来生成配置文件,但是 my.ini 也没有解决我的问题。

问题

  1. 我应该更改什么来阻止 MySQL 在磁盘上创建临时表?我需要更改哪些设置?我应该给它扔更多的内存吗?

  2. 如何阻止 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_sizemax-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 …

mysql performance windows database-tuning temporary-tables

32
推荐指数
2
解决办法
9万
查看次数

我怎么知道为什么某个表上的插入很慢?

我知道 SQL 表上的 INSERT 可能由于多种原因而变慢:

  • 表上存在 INSERT TRIGGERs
  • 许多必须检查的强制约束(通常是外键)
  • 在表中间插入一行时聚集索引中的页面拆分
  • 更新所有相关的非聚集索引
  • 阻止桌子上的其他活动
  • IO 写响应时间差
  • ......我错过了什么?

在我的特定情况下,我如何判断哪个负责?如何衡量页面拆分与非聚集索引更新与其他所有内容的影响?

我有一个存储过程,一次插入大约 10,000 行(来自临时表),每 10k 行大约需要 90 秒。这是令人无法接受的缓慢,因为它会导致其他 spid 超时。

我查看了执行计划,我看到了 INSERT CLUSTERED INDEX 任务和 FK 查找中的所有 INDEX SEEKS,但它仍然没有确切地告诉我为什么需要这么长时间。没有触发器,但该表确实有一些 FKey(似乎已正确索引)。

这是一个 SQL 2000 数据库。

sql-server insert sql-server-2000 database-tuning

30
推荐指数
4
解决办法
6万
查看次数

设计用户身份验证(角色和权限)模块

我正在尝试为将成为 Delphi UI 应用程序后端的 MS SQL Server 数据库建模用户身份验证模块。基本上,我想拥有用户只属于一个组的用户帐户。一个组可以拥有“n”个权限。

我还想向数据库添加密码历史记录,因为用户将需要根据应用程序设置(例如,每 90 天)更改其密码。

我还想在每次用户登录和退出时记录一个事件。我可能会将其扩展到未来的其他活动。

下面你会发现我的第一个破解。请让我知道任何改进它的建议,因为这是我第一次这样做。

您是否认为需要针对基于角色的安全性和密码规则/到期期限的约束的其他属性?

数据库设计

database-design datatypes database-tuning relational-theory

17
推荐指数
1
解决办法
3万
查看次数

MySQL table_cache 和 Opened_tables

我见过有人用Open_tables和Opened_tables的对比来评估MySQL中table_cache是​​否太小。但是,我相信 Opened_tables 在正常运行时间内是累积的,所以这不是一个有效的比较。唯一需要注意的是,也许 Opened_tables 只会在未命中时受到冲击 - 尽管即使如此,如果每秒打开的表仍然很小,它逐渐增长可能不是问题。

如果将 Open_tables 与 Opened_tables 进行比较无效,是否有另一种方法可以获得测量数据?

这是在 MySQL 5.0 上,但也欢迎版本之间的差异。

mysql database-tuning configuration

15
推荐指数
2
解决办法
3万
查看次数

SELECT TOP 1 损害查询性能;有没有一种 dba 可访问的方法来克服这个问题?

在生产应用程序(C# 与 SQL Server 2014 Standard 对话)中,有一个如下所示的查询。大多数情况下,它以毫秒为单位运行。但偶尔(对于 的某些值@Id),它会发疯并需要一分钟左右的时间。这比应用超时时间长,因此用户的应用失败。

在“疯了”的情况下,返回的结果集是正确的,因为它在许多但不是所有其他情况下都是空的。

幸运的是,这在生产和开发环境中都是可重现的。

开发人员说从查询中删除“TOP 1”,然后确保应用程序使用结果集的额外行,清除性能问题。

查询规划器在TOP 1存在时建议没有索引。(在开发中)。

正在更改查询并修复应用程序。推出需要一段时间。

我的问题:是否有任何 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 
  JOIN product_attribute ON product_attribute.product_id = product.product_id 
 WHERE apg.group_id = @Id
   AND apg.start_date < GETDATE()
   AND (apg.end_date IS NULL …
Run Code Online (Sandbox Code Playgroud)

performance sql-server database-tuning query-performance

13
推荐指数
1
解决办法
1650
查看次数

从 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
Run Code Online (Sandbox Code Playgroud)

当我在 SSMS 中运行此查询时,执行时间为 953 毫秒,但是当我从 C# 中的 Linq 查询运行此查询时,执行时间为 1813 毫秒。

Linq 查询使用“.Net SqlClient 数据提供程序”并针对 EntityFramework(EDMX 文件)发出。这可能是一个问题吗?

有谁知道为什么我在那些相同但从不同上下文针对同一数据库执行的请求的执行时间之间有很大差异?

我验证了两个请求的所有执行计划,它们使用相同的索引来满足各自的查询。

要查看 C# 请求的执行计划,我使用 SQL 分析器捕获 Show Plan XML 事件,并将其与 SSMS 之一进行比较,两者相同。

sql-server-2008 database-tuning

12
推荐指数
2
解决办法
1359
查看次数

SQL Server:有没有人使用过大页面分配调整选项?

有没有人使用过 using 的调整选项TF834 large page allocations。我只是在阅读一篇关于它的 MS 文章,想知道是否有人使用过它并看到了性能提升。有什么需要注意的事项、提示、陷阱吗?

服务器是 Windows 2008 64 位、128 GB RAM、4 CPU 8 核超线程(总共 64 核)SQL2005 服务器。我希望调整服务器以更好地使用其规范,而不仅仅是使用当前在其上完成的默认 SQL 安装。任何额外的提示将受到欢迎。

performance sql-server database-tuning

12
推荐指数
1
解决办法
2252
查看次数

我可以安全地终止 InnoDB 表上的 OPTIMIZE TABLE 吗?

MySQL 的kill 警告文档:

警告

杀死一个表上的REPAIR TABLEorOPTIMIZE TABLE操作会MyISAM导致表损坏且无法使用。对此类表的任何读取或写入都会失败,直到您再次对其进行优化或修复(无中断)。

那是针对 MyISAM 的。

杀死OPTIMIZE TABLE针对 InnoDB 表运行的进程是否也不安全?

mysql innodb database-tuning mysql-5.5

12
推荐指数
1
解决办法
2万
查看次数