База данных Azure для PostgreSQL гибкий сервер Slow с Django

Я использую Django для подключения к Azure Database for PostgreSQL flexible server, но это очень медленно, ниже приведены характеристики сервера :

Вычисления + хранение данных

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

Как вы можете видеть выше, характеристики высокие, но производительность не лучше, в postman, когда я нажимал, чтобы получить данные, требовалось 34.5 seconds, это слишком много, чтобы ждать.

В моем коде 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 flexible server?

Эта проблема с задержкой может быть вызвана различием регионов в Azure. Бэкэнд-сервис, который взаимодействует с базой данных, должен находиться в том же регионе.

Вернуться на верх