|
@@ -65,7 +65,10 @@ func (d *Dialector) Name() string { return "vrtx" }
|
|
|
// 引擎无版本概念, 打开时的 CRC/WAL 恢复即完整性校验。
|
|
// 引擎无版本概念, 打开时的 CRC/WAL 恢复即完整性校验。
|
|
|
//
|
|
//
|
|
|
// 两个引擎相关的适配点:
|
|
// 两个引擎相关的适配点:
|
|
|
-// - SetMaxOpenConns(1): 引擎是单写者模型, 连接池压成 1 让所有 SQL 串行;
|
|
|
|
|
|
|
+// - SetMaxOpenConns(16): 引擎已是一写多读模型, 允许多个读者并发。
|
|
|
|
|
+// 写锁由 core.accMu.Lock() 排他保证 (Begin/Commit/DDL 拿写锁), 读锁
|
|
|
|
|
+// 由 core.accMu.RLock() 允许多读者并行 —— 连接池容量要 ≥ driver 层
|
|
|
|
|
+// shared.sem (16), 否则并发读在 sql.DB 层就被串死了。
|
|
|
// - ConnPool 包一层 rewritePool: 内联 LIMIT/OFFSET 整数参数 (驱动解析器支持限定名)
|
|
// - ConnPool 包一层 rewritePool: 内联 LIMIT/OFFSET 整数参数 (驱动解析器支持限定名)
|
|
|
// (旧解析器只认裸列名/字面量 LIMIT, 该包装让 GORM 的 SQL 形态稳定可用)。
|
|
// (旧解析器只认裸列名/字面量 LIMIT, 该包装让 GORM 的 SQL 形态稳定可用)。
|
|
|
func (d *Dialector) Initialize(db *gorm.DB) error {
|
|
func (d *Dialector) Initialize(db *gorm.DB) error {
|
|
@@ -76,7 +79,7 @@ func (d *Dialector) Initialize(db *gorm.DB) error {
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
return err
|
|
return err
|
|
|
}
|
|
}
|
|
|
- sqlDB.SetMaxOpenConns(1)
|
|
|
|
|
|
|
+ sqlDB.SetMaxOpenConns(16)
|
|
|
|
|
|
|
|
eng, err := vrtxsql.SharedDB(d.DSN)
|
|
eng, err := vrtxsql.SharedDB(d.DSN)
|
|
|
if err != nil {
|
|
if err != nil {
|