python - Azure Database for PostgreSQL 灵活服务器使用 Django 速度缓慢

标签 python django postgresql azure

我使用 Django 连接到 Azure Database for PostgreSQL 灵活服务器,但速度非常慢,以下是服务器的规范:

计算+存储

Pricing tier
Memory Optimized
Compute size
Standard_E4s_v3 (4 vCores, 32 GiB memory, 6400 max iops)
Storage
32 GiB

高可用性:

High availability
Enabled
High availability mode
ZoneRedundant
Availability zone
2
Standby availability zone
1

Specs

specs

正如你在上面看到的,规范很高,但性能并没有更好,在 postman 中,当我点击获取数据时花了34.5秒,这实在是太等不及了.

在我的 Django 代码中,我尽力优化查询,在 Heroku 上它非常快,但是在 Azure 上它非常慢,可以采取什么措施来提高服务器的速度?

有关 Django 的更多信息,这是端点的 view.py:

@method_decorator(cache_page(60 * 60 * 4), name='get')
@method_decorator(vary_on_cookie, name='get')
class PostList(generics.ListCreateAPIView):
    """Blog post lists"""
    queryset = Post.objects.filter(status=APPROVED).select_related(
        "owner", "grade_level", "feedback").prefetch_related(
        "bookmarks", "likes", "comments",
        "tags", "tags__following").prefetch_related("address_views")
    serializer_class = serializers.PostSerializer
    authentication_classes = (JWTAuthentication,)
    permission_classes = (PostsProtectOrReadOnly, IsMentorOnly)

    def filter_queryset(self, queryset):
        ordering = self.request.GET.get("order_by", None)
        author = self.request.GET.get("author", None)
        search = self.request.GET.get("search", None)
        tag = self.request.GET.get("tag", None)

        # filter queryset with filter_backends 🖟
        queryset = super().filter_queryset(queryset)
        if ordering == 'blog_views':
            queryset = queryset.annotate(
                address_views_count=Count('address_views')).order_by(
                '-address_views_count')

        if author:
            queryset = queryset.filter(owner__email=author).select_related(
                "owner", "grade_level", "feedback").prefetch_related(
                "bookmarks", "likes", "comments", "tags",
                "tags__following").prefetch_related("address_views")

        if tag:
            queryset = queryset.filter(
                tags__name__icontains=tag).select_related(
                "owner", "grade_level", "feedback").prefetch_related(
                "bookmarks", "likes", "comments", "tags",
                "tags__following").prefetch_related("address_views")

        if search:
            queryset = queryset.annotate(
                rank=SearchRank(SearchVector('title', 'body', 'description'),
                                SearchQuery(search))).filter(
                rank__gte=SEARCH_VALUE).order_by('-rank')

        return queryset

然后是我的serializer.py:

class PostSerializer(SoftDeletionSerializer):
    """Post Serializer"""
    owner = UserProfile(read_only=True)
    tags = TagSerializer(many=True)
    comments = CommentSerializer(many=True, read_only=True)
    slug = serializers.SlugField(read_only=True)
    grade_level = GradeClassSerializer(many=False)

    class Meta:
        model = Post
        fields = ('uuid', 'id', 'title', 'body', 'owner', 'slug', 'grade_level',
                  'comments', 'tags', 'description', 'image',
                  'created', 'modified', 'blog_views', 'blog_likes',
                  'blog_bookmarks', 'status',
                  'read_time', 'is_featured',)
        readonly = ('id', 'status',) + SoftDeletionSerializer.Meta.fields

    def to_representation(self, instance):
        """Overwrite to serialize extra fields in the response."""
        representation = super(PostSerializer, self).to_representation(instance)
        representation['has_bookmarked'] = self.has_bookmarked(instance)
        representation['has_liked'] = self.has_liked(instance)
        return representation

    def has_liked(self, instance):
        return self.context['request'].user in list(instance.likes.all())

    def has_bookmarked(self, instance):
        return self.context['request'].user in list(instance.bookmarks.all())

在我的 settings.py 中,我没有未使用的中间件或应用程序,我清理了它,我认为问题出在数据库上,而不是代码上。

什么可以提高 Azure Database for PostgreSQL 灵活服务器的速度?

最佳答案

此延迟问题可能是由于 Azure 中的区域差异造成的。您应该在同一区域拥有与数据库通信的后端服务。

关于python - Azure Database for PostgreSQL 灵活服务器使用 Django 速度缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74891196/

相关文章:

python - 抽象方法的装饰器顺序

python - 为什么我的 if 语句会产生关键错误?

python - 如何在谷歌云平台上运行django测试

java - 使用 Eclipse JDBC 将 Postgres 查询计划转换为 xml 并存储在文件中

生成 Django Postgres psycopg2 错误脚本 - 引用表名

python - 从视频游戏屏幕截图中尽可能多地识别文本的最佳方法是什么?

Python - 忽略列表中的字符串不起作用

django - 不同数据库中的多重身份验证

sql - 如何计算每秒的记录数?

python - Matplotlib图形图像转base64