yii获取执行的sql
‘壹’ yii2怎么连接sql server
在saas中,多租户数据库分库管理时常常需要自定义数据库链接,并且需要支持在框架加载后再调用数据库连接。
Yii2 如何定义数据库连接要注意的是:
即除了使用/Yii::app−>set()外,还需要再多使用下面一句话:/Yii::app->$database->open();
因为在框架加载后再调用时,yii本身并不会帮打开连接。使用如下代码:
php"><?php/***User:chenlb*/namespacebackend/moles/monitorMysql/controllers/show;classAllDatabasesextends/yii/base/Action{privatestatic$_conn=[];publicfunctionrun(){//CreateTestDBConnection$db=$this->getDb('数据库名称');var_mp($db->getSchema()->getTableSchema('log')->columns['id']->isPrimaryKey);exit;}/***得到数据库连接*/publicfunctiongetDb($database){if(!isset(self::$_conn[$database])){$connInfo=['class'=>'yii/db/Connection','dsn'=>'mysql:host=HOST_IP;port=3307;dbname='.$database,'username'=>'username','password'=>'password','charset'=>'utf8'];/Yii::$app->set($database,$connInfo);/Yii::$app->$database->open();self::$_conn[$database]=/Yii::$app->$database;}returnself::$_conn[$database];}}
‘贰’ yii 中如何输出刚刚执行的完整的sql语句
1.修改main.php,加入如下代码:
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'error, warning,trace',
),
// 以下是新加
array( // configuration for the toolbar
'class'=>'XWebDebugRouter',
'config'=>'alignLeft, opaque, runInDebug, fixedPos, collapsed, yamlStyle',
'levels'=>'error, warning, trace, profile, info',
//'categories' => 'system.db.*',
'allowedIPs'=>array('127.0.0.1','::1','192.168.1[0-5].[0-9]{3}','如果程序在外网需要填入你的公网的ip'),
),
),
)
2.db链接的配置里面做下修改:
'db'=>array(
'connectionString'=>'mysql:host=*.*.*.*;dbname=test',
'emulatePrepare'=>true, // 加入
'enableParamLogging' => true, // 加入
'username'=>'-----',
'password'=>'---',
'charset'=>'utf8',
'schemaCachingDuration'=>'0',
'autoConnect'=>false,
),
3.完成
‘叁’ 怎么获取执行的sql语句
1、select b.spid,a.sid,a.serial#,a.machine from v$session a,v$process b where a.paddr = b.addr and a.machine='yz';
PID SID SERIAL# MACHINE
9497 49 3406 yz
2、利用10046事件开始跟踪
SQL>execute sys.dbms_system.set_ev(49, 3406,10046,1,'');
PL/SQL procere successfully completed.
、这时候你可以运行应用程序,对于web 应用你就可以打开你认为性能比较差页面。
4、如果你要查看这段时间执行了哪些sql语句,可以执行下面的语句结束跟踪
SQL>execute sys.dbms_system.set_ev(49,3406,10046,0,'');
PL/SQL procere successfully completed.
5、SQL trace 工具会收集这个过程中执行的SQL的性能状态数据,记录到一个跟踪文件中.这个跟踪文件提供了许多有用的信息,例如解析次数.执行次数,CPU使用时间等。
6、这时候你可以通过下面的语句获得产生的跟踪文件所在的目录
SQL> select value from v$parameter where name = 'user_mp_dest';
VALUE
--------------------------------------------------------------------------------
/opt/oracle/admin/ocn/ump
7、在/opt/oracle/admin/ocn/ump下找到yzoracle_ora_9497.trc。9497是你当前应用的spid。
8、注意yzoracle_ora_9497.trc是不可读的,我们需要执行oracle的tkprof命令,将yzoracle_ora_9497.trc转化为我们可读的文本文件。
tkprof yzoracle_ora_9497.trc yzoracle_ora_9497.sql
这样你就可以在yzoracle_ora_9497.sql文件中看到所有的sql语句执行次数,CPU使用时间等数据。
‘肆’ Yii2镐庝箞镓ц屽师鐢焥ql璇鍙ユ煡璇
Yii2镐庝箞镓ц屽师鐢焥ql璇鍙
镓ц岋细
Yii::$app->getDb()->createCommand("Your SQL")->execute();
镆ヨ锛
Yii::$app->getDb()->createCommand("Your SQL")->queryAll();
鍏朵粬锛
Yii::$app->getDb()->createCommand("Your SQL")->xxx
‘伍’ 镐庝箞銮峰彇exec(@sql)镄勬墽琛岀粨鏋
exec(@sql)镓ц屽悗锛岀粨鏋滃氨浼氭樉绀哄湪缁撴灉镙忛噷銆
涓句緥锛
浠g爜濡备笅
declare@tablenamevarchar(20)
declare@sqlvarchar(2000)
set@tablename='test'
set@sql='select*from'+@tablename+''
exec(@sql)
镓ц岀粨鏋滐细
‘陆’ yii2.0 怎么打印自动生成的创建sql语句
在config/main.php中
'components'=>array(
'db'=>array(
'enableParamLogging' => true,//增加这行
),
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'trace, info error, warning', //日志标准增加trace, info
),
),
),
)
在你的application.log中可以直接查看, 另外一种方法,也是最方便的就是安装debugtoolbar扩展,开发必备.