Hi,
I am using oci8pdo extension for Oracle DB and running following code.
private function runInsertCommand($inserts, $params, $connection, $log = false)
{
//Here we will insert the records to table.
$query = $this->structureQuery($inserts);
$command = $connection->createCommand($query);
$command->bindValues($params);
// for checking memory usage
echo memory_get_usage();
$command->execute()
echo memory_get_usage();
}
The query insert 100 records. Each time $command->execute() is called, roughly 2MB increased. With 200 records, the memory spike to 4MB (each time), 2,000 records, the memory usage is 40MB and so on! I already tried setting YII_DEBUG = false, unsetting all the variables and still to no avail.
Updated: I tried using MySql 5.3.3 version and facing the same issue!
Later, i have implemented my own function to insert into database.
$conn = oci_pconnect($username, $password, $database);
$this->conn = $conn;
$parsed = @oci_parse($this->conn, $sql);
$this->stmt = $parsed;
$clob = array();
//bind parameters
foreach($this->params as $key=>$value){
$clob[$key] = oci_new_descriptor($this->conn, OCI_D_LOB);
if(!oci_bind_by_name($this->stmt,$key,$clob[$key],-1,OCI_B_CLOB)){
self::logData("ERROR BINDING PARAMS");
}
$clob[$key]->writetemporary($value);
}
oci_execute($this->stmt);
Using the above code, no memory leak at all. I have inserted over a million records in MySql and Oracle! Can someone fix the CDbCommand for insertion? (Note that the issue occurred in Insertion only. No memory leak found in Selection)
Thanks,
Faisal