我经常使用 Yii2,但通常使用 MySQL。这是我第一次在甲骨文中使用它。不过,我发现性能很差。我已经在谷歌上搜索了一些,发现虽然使用 Yii2 + Oracle 似乎并不常见,但似乎确实有人在谈论它很慢。
我想知道可以使用哪些建议/技巧/流程/软件包来提高性能?
我正在加载一张非常小的桌子。它有 8 行,整个表有 4 列。它们是使用 6.4MB 数据的 27 个数据库调用,运行大约需要 3 秒。查看日志,我看到很多我不太明白的东西:
SELECT D.CONSTRAINT_NAME, D.CONSTRAINT_TYPE, C.COLUMN_NAME, C.POSITION, D.R_CONSTRAINT_NAME, E.TABLE_NAME AS TABLE_REF, F.COLUMN_NAME AS COLUMN_REF, C.TABLE_NAME
FROM
ALL_CONS_COLUMNS C
INNER JOIN ALL_CONSTRAINTS D ON D.OWNER = C.OWNER AND D.CONSTRAINT_NAME = C.CONSTRAINT_NAME
LEFT JOIN ALL_CONSTRAINTS E ON E.OWNER = D.R_OWNER AND E.CONSTRAINT_NAME = D.R_CONSTRAINT_NAME
LEFT JOIN ALL_CONS_COLUMNS F ON F.OWNER = E.OWNER AND F.CONSTRAINT_NAME = E.CONSTRAINT_NAME AND F.POSITION = C.POSITION
和
SELECT a.column_name, a.data_type, a.data_precision, a.data_scale, a.data_length,
a.nullable, a.data_default,
( SELECT D.constraint_type
FROM ALL_CONS_COLUMNS C
inner join ALL_constraints D on D.OWNER = C.OWNER and D.constraint_name = C.constraint_name
WHERE C.OWNER = B.OWNER
and C.table_name = B.object_name
and C.column_name = A.column_name
and D.constraint_type = 'P') as Key,
com.comments as column_comment
FROM ALL_TAB_COLUMNS A
inner join ALL_OBJECTS B ON b.owner = a.owner and ltrim(B.OBJECT_NAME) = ltrim(A.TABLE_NAME)
LEFT JOIN all_col_comments com ON (A.owner = com.owner AND A.table_name = com.table_name AND A.column_name = com.column_name)
然后是更多关于触发器的东西。
当我尝试使用诸如
Model::find()->with('relationName')->all();
我得到
'ORA-01795: maximum number of expressions in a list is 1000 error
.
这些表总共有大约 17k 行。一个表中大约有 11k,另一个表中大约有 7k 是链接的。
我使用 fk 约束作为表中的引用。
在数据库配置中添加/使用以下设置。
'schemaCacheDuration' => 7200,
'schemaCache' => 'cache',
'enableSchemaCache' => true,
和
将YII_DEBUG
从true
更改为false
,将YII_ENV
从dev
更改为prod
。
这将减少不必要的 SQL 执行。