我的应用程序是非常密集的数据库,因此我正在尝试减少数据库的负载。我使用 PostgreSQL 作为 rdbms,而 python 是编程语言。
为了减少负载,我已经在应用程序中使用了缓存机制。我使用的缓存类型是服务器缓存、浏览器缓存。
目前我正在调整 PostgreSQL 查询缓存以使其符合服务器上运行的查询的特征。
问题:
最佳答案
调整 PostgreSQL 不仅仅是调整缓存。事实上,主要的高级事物是“共享缓冲区”(将其视为主要数据和索引缓存)和 work_mem。
共享缓冲区有助于读写。你想给它一个合适的大小,但它是针对整个集群的。你不能真正在每个表或特别是查询的基础上调整它。重要的是,它并不是真正存储查询结果。它存储表、索引和其他数据。在符合 ACID 的数据库中,缓存查询结果不是很有效或有用。
“work_mem”用于在内存中对查询结果进行排序,而不必诉诸于写入磁盘。根据您的查询,该区域可能与缓冲区缓存一样重要,并且更易于调整。在运行需要进行更大排序的查询之前,您可以发出设置命令,如“SET work_mem = '256MB';”
正如其他人所建议的那样,您可以使用“解释”找出查询运行缓慢的原因。我个人建议学习 postgresql 用来获取数据的“访问路径”。与简单地考虑“缓存结果”相比,这涉及更多,老实说是更好地利用资源。
老实说,您也可以通过数据设计以及使用分区、函数索引和其他技术等功能来改进很多东西。
另一件事是你可以通过编写更好的查询来获得更好的性能。像“with”子句这样的东西可以阻止 postgres 的优化器完全优化查询。 优化器本身也有可以调整的参数——这样数据库将在执行查询之前花费更多(或更少)的时间来优化查询。这可能会有所不同。
您还可以使用某些技术来编写查询来帮助优化器。一种这样的技术是使用绑定(bind)变量(冒号变量)——这将导致优化器使用不同的传入数据一遍又一遍地获取相同的查询。这样,就不必一遍又一遍地评估结构。 . 可以通过这种方式缓存查询计划。
没有看到您的一些查询、您的表和索引设计以及解释计划,很难做出具体的推荐。
一般来说,您需要找到性能不如您预期的查询,并找出争用的位置。可能是磁盘访问,但是,原因最终是最重要的部分..是否必须去磁盘进行排序?它是否在内部选择了错误的路径来获取数据,以至于它正在读取可以在查询过程的早期轻松消除的数据......我已经成为 oracle 认证的 DBA 超过 20 年,而 PostgreSQL 绝对不同,但是,在诊断查询的性能问题时会使用许多相同的技术。虽然您不能真正提供提示,但您仍然可以重写查询或调整某些参数以获得更好的性能。总的来说,从长远来看,我发现 postgresql 更容易调整。如果你能提供一些细节,也许是一个查询和解释信息,我很乐意给你具体的建议。但遗憾的是,“缓存调整”可能会自行为您提供您想要的速度。
关于python - 在 postgreSQL 中启用查询缓存以提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34553778/
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:
尝试在我的RoR应用程序中实现计数器缓存列时出现错误Unknownkey(s):counter_cache。我在这个问题中实现了模型关联:Modelassociationquestion这是我的迁移:classAddVideoVotesCountToVideos0Video.reset_column_informationVideo.find(:all).eachdo|p|p.update_attributes:videos_votes_count,p.video_votes.lengthendenddefself.downremove_column:videos,:video_vot
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
在启用Rack::Deflater来gzip我的响应主体时偶然发现了一些奇怪的东西。也许我遗漏了一些东西,但启用此功能后,响应被压缩,但是资源的ETag在每个请求上都会发生变化。这会强制应用程序每次都响应,而不是发送304。这在没有启用Rack::Deflater的情况下有效,我已经验证页面源没有改变。我正在运行一个使用thin作为Web服务器的Rails应用程序。Gemfile.lockhttps://gist.github.com/2510816有没有什么方法可以让我从Rack中间件获得更多的输出,这样我就可以看到发生了什么?提前致谢。 最佳答案
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
前言作为一名程序员,自己的本质工作就是做程序开发,那么程序开发的时候最直接的体现就是代码,检验一个程序员技术水平的一个核心环节就是开发时候的代码能力。众所周知,程序开发的水平提升是一个循序渐进的过程,每一位程序员都是从“菜鸟”变成“大神”的,所以程序员在程序开发过程中的代码能力也是根据平时开发中的业务实践来积累和提升的。提高代码能力核心要素程序员要想提高自身代码能力,尤其是新晋程序员的代码能力有很大的提升空间的时候,需要针对性的去提高自己的代码能力。提高代码能力其实有几个比较关键的点,只要把握住这些方面,就能很好的、快速的提高自己的一部分代码能力。1、多去阅读开源项目,如有机会可以亲自参与开源
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o