mirror of
https://github.com/zulip/zulip.git
synced 2025-11-13 18:36:36 +00:00
zilencer: Update remoterealm indexes.
There is no reason to have an index on just `realm_id` or `remote_id`, as those values mean nothing outside of the scope of a specific `server_id`. Remove those never-used single-column indexes from the two tables that have them. By contrast, the pair of `server_id` and `remote_id` is quite useful and specific -- it is a unique pair, and every POST of statistics from a remote host requires looking up the highest `remote_id` for a given `server_id`, which (without this index) is otherwise a quite large scan. Add a unique constraint, which (in PostgreSQL) is implemented as a unique index.
This commit is contained in:
committed by
Tim Abbott
parent
d228c502e9
commit
902498ec4f
45
zilencer/migrations/0029_update_remoterealm_indexes.py
Normal file
45
zilencer/migrations/0029_update_remoterealm_indexes.py
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
# Generated by Django 4.2.5 on 2023-09-13 05:02
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
("zilencer", "0028_rename_extradatajson_remoteauditlog_extra_data"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="remoterealmauditlog",
|
||||||
|
name="realm_id",
|
||||||
|
field=models.IntegerField(),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="remoterealmauditlog",
|
||||||
|
name="remote_id",
|
||||||
|
field=models.IntegerField(),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="remoterealmcount",
|
||||||
|
name="realm_id",
|
||||||
|
field=models.IntegerField(),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="remoterealmcount",
|
||||||
|
name="remote_id",
|
||||||
|
field=models.IntegerField(),
|
||||||
|
),
|
||||||
|
migrations.AddConstraint(
|
||||||
|
model_name="remoterealmauditlog",
|
||||||
|
constraint=models.UniqueConstraint(
|
||||||
|
fields=("server", "remote_id"), name="zilencer_remoterealmauditlog_server_remote"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddIndex(
|
||||||
|
model_name="remoterealmauditlog",
|
||||||
|
index=models.Index(
|
||||||
|
fields=["server", "realm_id", "remote_id"],
|
||||||
|
name="zilencer_remoterealmauditlog_server_realm_remote",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -100,13 +100,27 @@ class RemoteRealmAuditLog(AbstractRealmAuditLog):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
server = models.ForeignKey(RemoteZulipServer, on_delete=models.CASCADE)
|
server = models.ForeignKey(RemoteZulipServer, on_delete=models.CASCADE)
|
||||||
realm_id = models.IntegerField(db_index=True)
|
realm_id = models.IntegerField()
|
||||||
# The remote_id field lets us deduplicate data from the remote server
|
# The remote_id field lets us deduplicate data from the remote server
|
||||||
remote_id = models.IntegerField(db_index=True)
|
remote_id = models.IntegerField()
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return f"{self.server!r} {self.event_type} {self.event_time} {self.id}"
|
return f"{self.server!r} {self.event_type} {self.event_time} {self.id}"
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
constraints = [
|
||||||
|
models.UniqueConstraint(
|
||||||
|
fields=["server", "remote_id"],
|
||||||
|
name="zilencer_remoterealmauditlog_server_remote",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
indexes = [
|
||||||
|
models.Index(
|
||||||
|
fields=["server", "realm_id", "remote_id"],
|
||||||
|
name="zilencer_remoterealmauditlog_server_realm_remote",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class RemoteInstallationCount(BaseCount):
|
class RemoteInstallationCount(BaseCount):
|
||||||
server = models.ForeignKey(RemoteZulipServer, on_delete=models.CASCADE)
|
server = models.ForeignKey(RemoteZulipServer, on_delete=models.CASCADE)
|
||||||
@@ -129,9 +143,9 @@ class RemoteInstallationCount(BaseCount):
|
|||||||
# We can't subclass RealmCount because we only have a realm_id here, not a foreign key.
|
# We can't subclass RealmCount because we only have a realm_id here, not a foreign key.
|
||||||
class RemoteRealmCount(BaseCount):
|
class RemoteRealmCount(BaseCount):
|
||||||
server = models.ForeignKey(RemoteZulipServer, on_delete=models.CASCADE)
|
server = models.ForeignKey(RemoteZulipServer, on_delete=models.CASCADE)
|
||||||
realm_id = models.IntegerField(db_index=True)
|
realm_id = models.IntegerField()
|
||||||
# The remote_id field lets us deduplicate data from the remote server
|
# The remote_id field lets us deduplicate data from the remote server
|
||||||
remote_id = models.IntegerField(db_index=True)
|
remote_id = models.IntegerField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ("server", "realm_id", "property", "subgroup", "end_time")
|
unique_together = ("server", "realm_id", "property", "subgroup", "end_time")
|
||||||
|
|||||||
Reference in New Issue
Block a user