Files
stock/backend/alembic/versions/20260902_01_adj_factor_cover.py
cirry 2f9c8bee2b 日K加载提速:adj_factor 覆盖索引 + 冷路径并发 + 热路径进程内缓存直返
- adj_factor 覆盖索引 (ts_code,trade_date) INCLUDE (adj_factor):根治堆碎片化
  (单股 6516 行散 6516 块,满载时位图堆扫 1.5s+),Index Only Scan ~2ms;
  因子查询全部改 2 列投影,lag() 窗口只取变点(6516→32 行)
- preview 冷路径 2 会话 2 波并发,信息卡合并为 LEFT JOIN LATERAL 一条
- 鉴权会话 60s 进程内缓存(登出/全端登出即时失效),全站请求省 ~80ms
- pvj/chipsj/stocksj/facetsj 存 model_dump_json 原串直返(与 response_model
  字节一致),热路径 230-2190ms → 1-2ms;get_version 本地缓存+bump 即时可见
- 连接池 10+20;smoke_test 适配鉴权缓存
2026-09-02 16:52:28 +08:00

50 lines
1.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""adj_factor 覆盖索引:因子查询免堆访问(碎片免疫)
Revision ID: 20260902_01
Revises: 20260815_04
Create Date: 2026-09-02
"""
from typing import Sequence, Union
from alembic import op
revision: str = "20260902_01"
down_revision: Union[str, Sequence[str], None] = "20260815_04"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# CONCURRENTLY / VACUUM 不能在事务内执行autocommit_block 内每条语句独立提交
with op.get_context().autocommit_block():
op.create_index(
"ix_adj_code_date_cover",
"adj_factor",
["ts_code", "trade_date"],
postgresql_concurrently=True,
postgresql_include=["adj_factor"],
)
# ts_code 单列索引被覆盖索引取代(同前缀),删掉省写放大
op.drop_index(
"ix_adj_factor_ts_code",
table_name="adj_factor",
postgresql_concurrently=True,
)
# 刷可见性映射Index Only Scan 的前提)+ 更新统计信息低峰执行3.2GB 表数十秒)
op.execute("VACUUM (ANALYZE) adj_factor")
def downgrade() -> None:
with op.get_context().autocommit_block():
op.create_index(
"ix_adj_factor_ts_code",
"adj_factor",
["ts_code"],
postgresql_concurrently=True,
)
op.drop_index(
"ix_adj_code_date_cover",
table_name="adj_factor",
postgresql_concurrently=True,
)