标签: performance

使用 ORM 时,在数据库设计中需要注意哪些事项

当您知道将使用对象关系映射器 (ORM)维基百科访问数据库时,需要注意哪些数据库设计问题?另请参阅实体框架 NHibernate 或 LLBLGenPro。

例如,我将注意 SqlServer 的 RPC 调用的 2100 参数限制。当使用 LLBLgen 并在使用复合主键时连接表时,这是一个问题,请参阅复合键的 MSDN 文章

performance orm

19
推荐指数
3
解决办法
1315
查看次数

带有 Oracle 的 SSD

我们一直在研究将 SSD 与 Oracle 结合使用,以加快我们的测试迁移运行。目前完成迁移运行需要 12-18 小时,具体取决于数据量(我们显然也在进行大量性能调整)。我们有许多廉价的 linux 机器,用于各种运行和分析。

直接从戴尔购买 SSD 的成本高得令人望而却步。我想知道是否有人有使用消费级固态硬盘(例如 Crucial/Micron 固态硬盘)的经验。

我意识到 TRIM 支持在 Linux(使用 Centos)上会是一个问题。有没有人在 Windows 7 上使用过它们来解决这个问题?

performance oracle

19
推荐指数
3
解决办法
2920
查看次数

缩小 VARCHAR 列的大小有什么意义吗?

搜索VARCHAR2Oracle 中列的大小是否会影响性能的报告似乎不一。

我想VARCHAR稍微解释一下大小的问题,并希望对此有所了解:

给定(多行)自由文本字段(不是名称之类的简短内容)要存储在(Oracle)数据库中,是否有任何意义(性能或其他)最大化VARCHAR容量(VARCHAR2(4000)在 Oracle 上)而是选择较小的值,例如 1024 或 512,因为无论如何这在 98% 的情况下可能就足够了。

performance oracle varchar

19
推荐指数
2
解决办法
4019
查看次数

在标准版上监控 Oracle 数据库性能的工具

这是我要找的:

  • 适用于标准版,即无诊断包。
  • 提供当前和历史性能数据。
  • 良好的视觉效果,可轻松发现趋势并向管理层展示。

如果您使用过该工具,我会对您发现的利弊感兴趣。我可以列出一个列表,但实际使用该工具的洞察力更有价值。

performance oracle oracle-se

19
推荐指数
3
解决办法
4万
查看次数

编写一个慢查询来测试慢查询日志记录?

是否有一个需要 > 2 秒的简单查询,以便我可以测试慢查询记录器?

我正在寻找类似通用递归或迭代语句的东西。

mysql performance slow-log

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

“WHERE 1=1”通常对查询性能有影响吗?

我最近看到了“where 1=1 statement”这个问题;为了编写更清晰的代码(从宿主语言的角度),我在构建动态 SQL 时经常使用的 SQL 构造。

一般来说,添加到 SQL 语句中是否会对查询性能产生负面影响?我不是在寻找关于特定数据库系统的答案(因为我已经在 DB2、SQL Server、MS-Access 和 mysql 中使用过它)——除非在不了解细节的情况下不可能回答。

performance optimization

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

标识列上的索引应该是非聚集的吗?

对于具有标识列的表,是否应该为标识列创建聚集或非聚集 PK/唯一索引?

原因是将为查询创建其他索引。使用非聚集索引(在堆上)并返回索引未涵盖的列的查询将使用较少的逻辑 I/O (LIO),因为没有额外的聚集索引 b 树查找步骤?

create table T (
  Id int identity(1,1) primary key, -- clustered or non-clustered? (surrogate key, may be used to join another table)
  A .... -- A, B, C have mixed data type of int, date, varchar, float, money, ....
  B ....
  C ....
  ....)

create index ix_A on T (A)
create index ix_..... -- Many indexes can be created for queries

-- Common query is query on A, B, C, ....
select A, …
Run Code Online (Sandbox Code Playgroud)

performance sql-server database-internals index-tuning heap performance-tuning

19
推荐指数
3
解决办法
5821
查看次数

我应该使用 UUID 以及 ID

由于各种原因,从日志记录到延迟关联,我已经在我的系统中使用 UUID 有一段时间了。当我变得不那么天真时,我使用的格式发生了变化:

  1. VARCHAR(255)
  2. VARCHAR(36)
  3. CHAR(36)
  4. BINARY(16)

当我到达最后一个时BINARY(16),我开始将性能与基本的自动增量整数进行比较。测试和结果如下所示,但如果你只是想总结,表示INT AUTOINCREMENTBINARY(16) RANDOM对数据相同的性能范围高达20万(该数据库已预先填充之前测试)。

我最初对使用 UUID 作为主键持怀疑态度,事实上我仍然如此,但是我看到这里有潜力创建一个可以同时使用两者的灵活数据库。尽管许多人强调两者的优点,但使用这两种数据类型抵消了哪些缺点?

  • PRIMARY INT
  • UNIQUE BINARY(16)

此类设置的用例将是表间关系的传统主键,唯一标识符用于系统间关系。

我本质上试图发现的是两种方法之间的效率差异。除了使用的四倍磁盘空间(在添加额外数据后可能在很大程度上可以忽略不计)之外,在我看来它们是相同的。

架构:

-- phpMyAdmin SQL Dump
-- version 4.0.10deb1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Sep 22, 2015 at 10:54 AM
-- Server version: 5.5.44-0ubuntu0.14.04.1
-- PHP Version: 5.5.29-1+deb.sury.org~trusty+3

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 …
Run Code Online (Sandbox Code Playgroud)

mysql performance database-design uniqueidentifier

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

在只接收 INSERT 的表上运行 VACUUM 是否值得?

在 2015 年的 re:Invent 演讲中,AWS 提到真空不仅应该在更新或删除之后运行,而且还应该在插入之后运行。这是谈话的相关部分:

http://www.youtube.com/watch?v=tZXp19q8RFo&t=16m2s

据说即使块只收到插入,也必须对块进行一些清理,并且可以在第一次选择块时(减慢读取速度)或在真空期间进行清理。这是真的吗?如果是这样,究竟必须进行哪些清理工作?

postgresql performance vacuum postgresql-performance

19
推荐指数
1
解决办法
2817
查看次数

LOB_DATA、慢表扫描和一些 I/O 问题

我有一个相当大的表,其中一列是 XML 数据,XML 条目的平均大小约为 15 KB。所有其他列都是常规整数、大整数、GUID 等。为了获得一些具体数字,假设该表有一百万行,大小约为 15 GB。

我注意到的是,如果我想选择所有列,这个表选择数据的速度真的很慢。当我做

SELECT TOP 1000 * FROM TABLE
Run Code Online (Sandbox Code Playgroud)

从磁盘读取数据大约需要 20-25 秒 - 即使我没有对结果强加任何排序。我使用冷缓存(即 after DBCC DROPCLEANBUFFERS)运行查询。IO统计结果如下:

扫描计数 1,逻辑读 364,物理读 24,预读 7191,lob 逻辑读 7924,lob 物理读 1690,lob 预读 3968。

它抓取了大约 15 MB 的数据。执行计划如我所料显示聚集索引扫描。

除了我的查询外,磁盘上没有任何 IO;我还检查了聚集索引碎片是否接近 0%。这是一个消费级 SATA 驱动器,但我仍然认为 SQL Server 能够以比 ~100-150 MB/min 更快的速度扫描表。

XML 字段的存在导致大部分表数据位于 LOB_DATA 页上(实际上约 90% 的表页是 LOB_DATA)。

我想我的问题是 - 我认为 LOB_DATA 页面会导致扫描缓慢不仅是因为它们的大小,还因为当表中有很多 LOB_DATA 页面时,SQL Server 无法有效扫描聚集索引,我是否正确?

更广泛地说 - 拥有这样的表结构/数据模式是否合理?使用 Filestream 的建议通常说明更大的字段大小,所以我真的不想走那条路。我还没有真正找到关于这个特定场景的任何好的信息。

我一直在考虑 XML 压缩,但它需要在客户端或使用 SQLCLR 完成,并且需要在系统中实现相当多的工作。

我尝试了压缩,因为 XML 是高度冗余的,所以我可以(在 …

performance xml sql-server blob

19
推荐指数
2
解决办法
2901
查看次数