问题标签 [database-tuning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - Speeding up my cloudant query
I was wondering whether someone could provide some advice on my cloudant query below. It is now taking upwards of 20 seconds to execute against a DB of 50,000 documents - I suspect I could be getting better speed than this.
The purpose of the query is to find all of my documents with the attribute "searchCode" equalling a specific value plus a further list of specific IDs.
Both searchCode and _id are indexed - any ideas why my query would be taking so long / what I could do to speed it up?
Thanks, James
python - Teradata 系统视图调整
我尝试使用 sqlalchemy 连接 teradata,以便使用 pandas 的 read_sql 和 to_sql 方法。
但是,连接速度太慢了。即使是简单的东西,例如 pd.read_sql('select current_date'),也需要 30 多秒才能完成。
我真的不明白为什么这么慢。如果有人以前遇到过类似的问题,请告诉我为什么以及如何解决这个问题。谢谢!
更新:
我尝试了 cProfile 和 sqlTAP 并意识到缓慢是由于方言生成的一些查询。has_table 肉类方法将运行对 dbc.tablesvx 视图的查询,该查询大约需要100 秒才能完成,而视图只有大约 55k 行。对于 pd.to_sql,这个 has_table 可能会被多次调用,并且需要对系统表进行一些其他查询。
似乎我需要做的就是对系统表进行一些调整,以使查询运行得更快。但是,我们的sql帮助人员告诉我,那些系统表已经处于最佳性能。这可能吗?有没有人对 teradata DBC 视图进行过任何调整?谢谢。
database - Oracle 索引包含另一个索引的所有列,正确或错误
我正在研究Oracle 12c
数据库。我有一张桌子被查询了很多。一个查询在 where 子句中使用列 A 和 B,另一个查询在 where 子句中使用 A、B、C、D 和 E 列。我想加快查询速度。
我添加了 2 个非唯一索引,一个在A & B上,一个在A & B & C & D & E上,所以我的第二个索引实际上包括第一个索引列。这是正确的吗?技术错误?还是视情况而定?
在这种情况下,在不同列上查询表时,索引的最佳实践是什么?指数有什么影响?
performance - postgresql缓存和交换内存增加
我有 postgresql(主从)基础设施。postgresql 服务器有 32 GB RAM 和 600 MB 交换空间。我们正在使用 java(tomcat) 应用程序。我已经使用http://pgtune.leopard.in.ua/执行了 postgresql 调优。但目前我的问题是,我的 postgresql 服务器缓存和交换内存会定期增加,并且在某些时候我们被迫清除缓存或重新启动 postgresql。能否请您告诉我背后的原因。以下是我的性能调整参数。其余参数为默认值。此外,我们正在使用 pgbarman 进行在其他服务器上配置的时间点备份。
database - 如何找出 Oracle 10g 中访问次数最多或使用频率最高的表
我在获取 oracle 10g 中最常用的表时遇到了麻烦。我正在使用带有 EBS R12.1.3 应用程序的 Oracle 10g 版本 10.2.0.4.0。
请帮助我整理出我的数据库中最常用的表。
如果可能的话,我想获取 TableName、所有者以及在一个时间范围内访问它的次数。
我需要这个用于调整目的。
请提供查询以获得相同的结果。
提前致谢 !
sql - 在索引计划中避免排序运算符
我有两个表 [LogTable] 和 [LogTable_Cross]。
下面是填充它们的模式和脚本:
我想选择所有那些给定用户ID的日志(来自LogTable)(用户ID将从交叉表LogTable_Cross中检查),日期为desc。
如您所见,有一个排序运算符起作用,这可能是因为以下行“ORDER BY DateSent DESC”
我的问题是,即使我在表上应用了以下索引,为什么该 Sort 运算符仍会出现在计划中
另一方面,如果我删除连接并以这种方式编写查询:
计划更改为
即排序运算符被删除,计划显示我的查询正在使用我的非聚集索引。
即使我正在使用联接,这也是一种在我的查询计划中删除“排序”运算符的方法。
编辑:
我更进一步,将“最大并行度”限制为 1
再次运行以下查询:
并且该计划仍然具有该 Sort 运算符:
编辑 2
即使我有以下建议的索引:
performance - 使用 jdbc 和 python phoenixdb 运行 Phoenix 的 Hbase 集群速度很慢
我有一个运行 HBase 的集群设置和一个 phoenix 查询服务器。目前我的集群包含一个主节点和 3 个从节点。我要连接的表由 124 列和总共 1600 万行组成。一个简单的COUNT(*)
orDISTINCT "value"
查询大约需要 1-2 分钟,据我了解,这不应该是这种情况 - Phoenix 有多快?为什么这么快?
在上面链接的文档中,对 1 亿行进行全表扫描大约需要 20 秒。而且由于我的表大小要小得多,我不明白为什么我的查询需要这么长时间。我可以做些什么来优化我的查询?我计划使用列族重建我的表(我知道这可以提高性能,但我想知道是否有其他方法可以快速提高性能,因为重建我当前的表将是一项非常艰巨的任务。
我正在使用 Phoenix 4.9 和 HBase 1.2。
windows - postgres windows 高效内存使用
我在具有 8 GB RAM 的笔记本电脑上的 Windows 10 上使用 Postgres 9.6(64 位)用于开发目的。该应用程序是具有 10 个 mio 记录的大表的批量海量数据处理。
我已经阅读了各种 Postgres 调优指南,以及之前在这里提出的问题/答案,我尝试了一些建议,但没有取得很大成功。
我知道我的笔记本电脑并不大,但是在查看性能监视器时,对于查询,我看到 Postgres 主要是写入(写入磁盘),读取很少,其中一个内核主要使用。我感兴趣的是记忆。我想知道为什么 Postgres 不使用它;它保持在 5.7GB “已使用”,但 8GB 可用。我的结论是 Postgres 决定将临时数据写入文件(内存映射文件),而不是使用内存。如果这是真的,也许我可以调整 Windows 并允许内存中的更多(文件)页面。无论如何,我的直觉是这与 Windows 上的 Postres 有关,而不是一个通用的 Postgres 问题。
有谁知道我可以如何配置 Postgres 和/或 Windows,以便 Postgres 更好地利用可用的(免费)内存?
非常感谢你的帮助
于尔根
performance - 如何设计在分析数据库上查询多个标签
我想在每笔交易中存储用户购买的自定义标签,例如,如果用户购买了鞋子,那么标签是"SPORTS", "NIKE", SHOES, COLOUR_BLACK, SIZE_12,..
这些标签是卖家有兴趣查询回以了解销售情况。
我的想法是,当新标签出现时,为该标签创建新代码(类似于哈希码,但顺序),代码从"a-z"
26 个字母开始,然后"aa, ab, ac...zz"
继续。现在,将一笔交易中给定的所有标签保存在tag (varchar)
用 分隔的一列中"|"
。
让我们假设映射是(在应用程序级别)
所以存储上面的购买交易,标签会像tag="|a|z|ay|bc|cq|"
现在允许卖家通过添加WHERE
条件搜索所售鞋子的数量tag LIKE %|ay|%
。现在的问题是我不能将索引(redshift db 中的排序键)用于“LIKE 以 % 开头”。那么如何解决这个问题,因为我可能有 1 亿条记录?不想全表扫描..
任何解决方案来解决这个问题?
Update_1:我没有遵循bridge table
概念(交叉引用表),因为我想在搜索指定标签后对结果执行分组。当两个标签在单个事务中匹配时,我的解决方案将只给出一行,但桥表会给我两行?那么我的 sum() 将加倍。
我得到如下建议
EXISTS (SELECT 1 FROM transaction_tag WHERE tag_id = 'zz' and trans_id = tr.trans_id) 在 WHERE 子句中为每个标签一次(注意:假设 tr 是周围查询中事务表的别名)
我没有遵循这个;因为我必须对标签执行 AND 和 OR 条件,例如 ("SPORTS" AND "ADIDAS") ---- "SHOE" AND ("NIKE" OR "ADIDAS")
Update_2:我没有关注位域,因为不知道 redshift 有这种支持,所以我假设我的系统是否将有至少 3500 个标签,并为每个标签分配一个位;这导致每笔交易有 437 个字节,尽管最多只能为一笔交易提供 5 个标签。这里有什么优化吗?
解决方案_1:
我曾考虑将最小值(SMALL_INT)和最大值(SMALL_INT)与标签列一起添加,并对其应用索引。
所以像这样
所以我的列值是
并且搜索鞋子的查询(ay = 51)是
maxTag <= 51 AND tag LIKE %|ay|%
搜索 shoe(ay=51) AND SIZE_12 (cq=95) 的查询是
minTag >= 51 AND maxTag <= 95 AND tag LIKE %|ay|%|cq|%
这会带来什么好处吗?请提出任何替代方案。