Tag: 数据库性能

entity framework与存储过程 – 性能测量

我试图build立多lessentity framework超过存储过程。 我希望说服我的老板让我们使用entity framework,以方便开发。 问题是我跑了一个性能testing,看起来EF比存储过程慢大约7倍。 我觉得这很难相信,我想知道如果我错过了什么。 这是一个确定的testing? 我能做些什么来提高EF Test的性能吗? var queries = 10000; // Stored Proc Test Stopwatch spStopwatch = new Stopwatch(); spStopwatch.Start(); for (int i = 0; i < queries; i++ ) { using (var sqlConn = new SlxDbConnection().Connection) { var cmd = new SqlCommand("uspSearchPerformanceTest", sqlConn) { CommandType = CommandType.StoredProcedure }; cmd.Parameters.AddWithValue("@searchText", "gstrader"); sqlConn.Open(); […]

MySQL的分区/分片/分裂 – 要走哪条路?

我们有一个大约70GB的InnoDB数据库,我们预计在未来的2到3年内它会增长到几百GB。 大约60%的数据属于一个表格。 目前数据库运行良好,因为我们有一个64 GB RAM的服务器,所以几乎整个数据库都适合内存,但是当数据量会大得多时,我们担心未来。 现在我们正在考虑某种方式来分割表格(特别是那些占据最大部分数据的表格),现在我想知道,最好的办法是什么。 我目前知道的选项是 使用版本5.1附带的MySQL分区 使用某种封装数据分区的第三方库(如hibernate shards) 在我们的应用程序中实现它自己 我们的应用程序基于J2EE和EJB 2.1(希望有一天我们可以切换到EJB 3)。 你会build议什么? 编辑(2011-02-11): 只是更新:目前数据库的大小是380 GB,我们的“大”表的数据大小是220 GB,其索引的大小是36 GB。 所以当整个表格不再适合记忆的时候,索引就是这样。 系统仍然运行良好(仍然在同一个硬件上),我们仍然在考虑对数据进行分区。 编辑(2014-06-04):多一个更新:整个数据库的大小是1.5TB,我们的“大”表的大小是1.1TB。 我们将服务器升级到具有128 GB RAM的4处理器机器(Intel Xeon E7450)。 系统仍然运行良好。 接下来我们要做的是把我们的大桌子放在一个单独的数据库服务器上(我们已经对软件进行了必要的修改),同时升级到具有256GB RAM的新硬件。 这种设置应该持续两年。 然后,我们要么终于开始实施分片解决scheme,要么只购买带有1TB内存的服务器,这将使我们保持一段时间。 编辑(2016-01-18): 我们已经把自己的数据库放在一个单独的服务器上。 目前该数据库的大小约为1.9TB,其他数据库的大小(除“大”之外的所有表)为1.1TB。 当前硬件设置: 惠普ProLiant DL 580 4个Intel(R)Xeon(R)CPU E7-4830 256 GB RAM 这个设置的性能很好。

使用git仓库作为数据库后端

我正在做一个处理结构化文档数据库的项目。 我有一个类别树(〜1000个类别,每个级别最多〜50个类别),每个类别包含数千个(最多约10000个)结构化文档。 每个文档都是几千字节的数据(我更喜欢YAML,但也可能是JSON或XML)。 这个系统的用户执行几种types的操作: 通过ID检索这些文件 通过内部的一些结构化属性来search文档 编辑文档(即添加/删除/重命名/合并); 每个编辑操作都应该logging下来,并附带一些注释 查看logging的特定文档更改的历史logging(包括查看谁更改了文档,何时更改以及为什么更改文档,获取更早的版本 – 如果需要,可能还原为这一版本) 当然,传统的解决scheme是使用某种文档数据库(比如CouchDB或者Mongo)来解决这个问题 – 然而,这个版本控制(历史)的东西引起了我一个疯狂的想法 – 为什么我不应该使用git仓库这个应用程序的数据库后端? 乍一看,可以这样解决: category =目录,document =文件 通过ID获取文档=>更改目录+读取工作副本中的文件 用编辑注释编辑文档=>由各种用户进行提交+存储提交消息 历史=>正常的git日志和旧的交易的检索 search=>这是一个稍微棘手的部分,我想这将需要一个类别定期导出到关系数据库索引的列,我们将允许search 这个解决scheme还有其他常见的缺陷吗? 有没有人试图实现这样的后端(即任何stream行的框架 – RoR,node.js,Django,CakePHP)? 这个解决scheme是否对性能或可靠性有任何可能的影响 – 也就是说,git会比传统的数据库解决scheme慢得多,否则就会有可扩展性/可靠性的缺陷? 我认为,推送/拉对方存储库的这种服务器集群应该相当健壮和可靠。 基本上,告诉我, 如果这个解决scheme将工作, 为什么会或不会做?

如何configurationMongoDB Java驱动程序MongoOptions以供生产使用?

我一直在寻找networking寻找configurationMongoDB Java驱动程序MongoOptions的最佳实践,我还没有拿出比API更多的东西。 这个search开始后,我遇到了“com.mongodb.DBPortPool $ SemaphoresOut:出信号量来获取数据库连接”错误,并通过增加连接/乘数我能够解决这个问题。 我正在寻找链接或configuration这些生产选项的最佳做法。 2.4驱动程序的选项包括: http : //api.mongodb.org/java/2.4/com/mongodb/MongoOptions.html autoConnectRetry connectionsPerHost connectTimeout maxWaitTime 了socketTimeout threadsAllowedToBlockForConnectionMultiplier 较新的驱动程序有更多的select,我也有兴趣听到这些。

在性能开始降低之前,MySQL数据库可以获得多大的性能?

MySQL数据库在什么时候开始失去性能? 物理数据库大小是否重要? logging的数量是多less? 任何性能下降是线性的还是指数性的? 我有我认为是一个大型的数据库,大约有15Mlogging,几乎2GB。 根据这些数字,是否有任何激励我清理数据,或者我可以安全地让它继续扩展几年?

Postgresql截断速度

我们使用Postgresql 9.1.4作为我们的数据库服务器。 我一直在试图加速我的testing套件,所以我已经盯着分析分贝来看看到底发生了什么。 我们使用database_cleaner在testing结束时截断表。 是的,我知道交易更快,我不能在某些情况下使用它们,所以我不关心这一点。 我所关心的是,为什么TRUNCATION需要这么长时间(比使用DELETE时间长),为什么在我的CI服务器上需要更长的时间。 目前,在本地(在Macbook Air上)一个完整的testing套件需要28分钟。 拖尾日志,每次我们截断表…即: TRUNCATE TABLE table1, table2 — … etc 执行截断需要1秒多的时间。 拖拽我们的CI服务器(Ubuntu 10.04 LTS)上的日志,需要8秒钟的时间来截断表,而构build需要84分钟。 当我切换到:deletion策略时,我的本地构build花了20分钟,CI服务器下降到44分钟。 这是一个重大的差异,我真的被吹走,为什么这可能是。 我调整 了 CI服务器上的数据库,它有16GB的系统RAM,4GB的shared_buffers …和一个SSD。 所有的好东西。 这怎么可能: 一个。 这比我的MacBook Air和2gb的RAM要慢很多 湾 那个TRUNCATION比DELETE慢得多,当postgresql文档 明确指出它应该快得多。 有什么想法吗?

多个模式与巨大的表格

考虑一个移动设备pipe理器系统,其中包含每个用户的信息,如存储他在手机上安装的应用程序的表格,审核详细信息,通知信息等。是否明智地为每个用户创build一个单独的模式? 对于单个用户来说,表格的数量是很大的,每个用户大约有30个表格。 将所有这些信息放到这些表中(反过来创build巨大的表),还是为每个用户创build一个模式,最好是有一个独立的模式? 提前致谢