首页 > 解决方案 > Django 权限使用过多的数据库

问题描述

我们开始对我们的数据库进行调查,因为它是我们基础架构中可扩展性较低的组件。我使用以下查询检查了我们的 Postgresql 数据库的表 pg_stat_statements:

SELECT userid, calls, total_time, rows, 100.0 * shared_blks_hit /
               nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent, query
          FROM pg_stat_statements ORDER BY total_time DESC LIMIT 5;

每次,相同的查询都是列表中的第一个:

16386 |  21564 |   4077324.749363 | 1423094 | 99.9960264252721535 | 
SELECT DISTINCT "auth_user"."id", "auth_user"."password", "auth_user"."last_login",
 "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name",
 "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff",
 "auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user" 
LEFT OUTER JOIN "auth_user_groups" ON ("auth_user"."id" = "auth_user_groups"."user_id")
LEFT OUTER JOIN "auth_group" ON ("auth_user_groups"."group_id" = "auth_group"."id") 
LEFT OUTER JOIN "auth_group_permissions" ON ("auth_group"."id" = "auth_group_permissions"."group_id") 
LEFT OUTER JOIN "auth_user_user_permissions" ON ("auth_user"."id" = "auth_user_user_permissions"."user_id") 
WHERE ("auth_group_permissions"."permission_id" = $1 OR "auth_user_user_permissions"."permission_id" = $2)

这听起来像是权限检查,据我所知,它是在请求级别缓存的。我想知道是否有人做了一个包将它们缓存到 memcached 中,或者找到了一种解决方案来减少检查这些权限的请求数量?

我检查了所有索引,它们似乎是正确的。请求有点慢,主要是因为我们有很多权限,但调用量仍然很疯狂。

标签: sqldjangopostgresql

解决方案


推荐阅读