我有一个简单的Monte-Carlo Pi计算程序.我尝试在2个不同的盒子上运行它(相同的硬件,内核版本略有不同).我发现在一种情况下(两倍的时间)性能显着下降.没有线程,性能大致相同.对程序的分析执行表明,较慢的程序每个futex调用花费较少的时间.
Linux(3.10.0-123.20.1(Red Hat 4.4.7-16))Python 2.6.6
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
99.69 53.229549 5 10792796 5385605 futex
Profile Output
==============
256 function calls in 26.189 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
39 26.186 0.671 26.186 0.671 :0(acquire)
Run Code Online (Sandbox Code Playgroud)
Linux(3.10.0-514.26.2(Red Hat 4.8.5-11))Python 2.7.5
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
99.69 94.281979 8 11620358 5646413 futex
Profile Output …
Run Code Online (Sandbox Code Playgroud) 是否可以在类型为字符串数组的列上创建索引.尝试使用GIN索引.但查询似乎没有使用这些索引.
Example
CREATE TABLE users (
name VARCHAR(100),
groups text[],
);
Query: SELECT name FROM users WHERE ANY(groups) = 'Engineering'.
Run Code Online (Sandbox Code Playgroud)
另外,在'groups'列上有效执行GROUP BY的最佳方法是什么,以便它可以给'组'和计数.
有T(user, timestamp,...)
100毫升+记录的表(PostgreSQL 9.1).
表单的查询
SELECT *
FROM T
WHERE user='abcd'
ORDER BY timestamp
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
timestamp
当有大约100000个用户记录时,使用索引而不是用户索引.
使用时间戳索引总是会得到较差的结果(20秒以上),因为它最终会扫描所有记录.timestamp
通过更改要使用的查询来绕过索引ORDER BY DATE(timestamp)
将导致查询求助于用户索引并给出小于100毫秒的结果.
为什么postgresql忽略user
索引timestamp
而是使用索引(时间戳索引需要查看所有记录)?是否有任何postgresql配置参数可以更改,以使查询使用用户名索引本身?
import json
import time
from itertools import count
def keygen(size):
for i in count(1):
s = str(i)
yield '0' * (size - len(s)) + str(s)
def jsontest(num):
keys = keygen(20)
kvjson = json.dumps(dict((keys.next(), '0' * 200) for i in range(num)))
kvpairs = json.loads(kvjson)
del kvpairs # Not required. Just to check if it makes any difference
print 'load completed'
jsontest(500000)
while 1:
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
Linux top表明在'jsontest'函数完成后,python进程保存了~450Mb的RAM.如果省略对' json.loads ' 的调用,则不会出现此问题.执行此函数后 的gc.collect 会释放内存.
看起来内存没有保存在任何缓存或python的内部内存分配器中,因为对gc.collect的显式调用正在释放内存.
这是否发生是因为从未达到垃圾收集的门槛(700,10,10)?
我确实在jsontest之后放了一些代码来模拟阈值.但它没有帮助.
当nginx的proxy_pass预计在URL代主机部分是构建一个动态值,nginx的原因是没有代理请求错误:没有定义的决心解析服务,其中服务= $ 1。与其尝试解析 service.abcd.local,不如尝试解析service。有解决办法吗?
location ~ ^/(.*)/(.*)$ {
proxy_pass http://$1.abcd.local/$1/$2;
}
Run Code Online (Sandbox Code Playgroud)