Unable to refresh lifetime statistics
-
22-10-2019 - |
Question
if I want to update the lifetime statistics it quickly returns 'Unable to refresh lifetime statistics.'
The only statistics I can refresh using the lifetime option are - coupons - most viewed
All the others return the above error, without even running for a very long time (within just a few seconds).
Refreshing daily statistics works.
How can I find the bug here?
edit: I'm running CE 1.8.1
I receive the following bugtrace:
2014-03-14T14:40:08+00:00 ERR (3):
exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`usr_p194982_2`.`sales_order_aggregated_created`, CONSTRAINT `FK_SALES_ORDER_AGGREGATED_CREATED_STORE_ID_CORE_STORE_STORE_ID` FOREIGN KEY (`store_id`) REFERENCES `core_store` (`store_id`) ON D)' in /html/dev/lib/Zend/Db/Statement/Pdo.php:228
Stack trace:
#0 /html/dev/lib/Zend/Db/Statement/Pdo.php(228): PDOStatement->execute(Array)
#1 /html/dev/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
#2 /html/dev/app/code/core/Zend/Db/Statement.php(291): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
#3 /html/dev/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#4 /html/dev/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `sa...', Array)
#5 /html/dev/lib/Varien/Db/Adapter/Pdo/Mysql.php(428): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `sa...', Array)
#6 /html/dev/app/code/core/Mage/Sales/Model/Resource/Report/Order/Createdat.php(229): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO `sa...')
#7 /html/dev/app/code/core/Mage/Sales/Model/Resource/Report/Order/Createdat.php(55): Mage_Sales_Model_Resource_Report_Order_Createdat->_aggregateByField('created_at', NULL, NULL)
#8 /html/dev/app/code/core/Mage/Sales/Model/Resource/Report/Order.php(55): Mage_Sales_Model_Resource_Report_Order_Createdat->aggregate(NULL, NULL)
#9 /html/dev/app/code/core/Mage/Adminhtml/controllers/Report/StatisticsController.php(159): Mage_Sales_Model_Resource_Report_Order->aggregate()
#10 /html/dev/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Adminhtml_Report_StatisticsController->refreshLifetimeAction()
#11 /html/dev/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('refreshLifetime')
#12 /html/dev/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#13 /html/dev/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#14 /html/dev/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#15 /html/dev/index.php(90): Mage::run('', 'store')
#16 {main}
Next exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`usr_p194982_2`.`sales_order_aggregated_created`, CONSTRAINT `FK_SALES_ORDER_AGGREGATED_CREATED_STORE_ID_CORE_STORE_STORE_ID` FOREIGN KEY (`store_id`) REFERENCES `core_store` (`store_id`) ON D)' in /html/dev/lib/Zend/Db/Statement/Pdo.php:234
Stack trace:
#0 /html/dev/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
#1 /html/dev/app/code/core/Zend/Db/Statement.php(291): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
#2 /html/dev/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#3 /html/dev/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `sa...', Array)
#4 /html/dev/lib/Varien/Db/Adapter/Pdo/Mysql.php(428): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `sa...', Array)
#5 /html/dev/app/code/core/Mage/Sales/Model/Resource/Report/Order/Createdat.php(229): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO `sa...')
#6 /html/dev/app/code/core/Mage/Sales/Model/Resource/Report/Order/Createdat.php(55): Mage_Sales_Model_Resource_Report_Order_Createdat->_aggregateByField('created_at', NULL, NULL)
#7 /html/dev/app/code/core/Mage/Sales/Model/Resource/Report/Order.php(55): Mage_Sales_Model_Resource_Report_Order_Createdat->aggregate(NULL, NULL)
#8 /html/dev/app/code/core/Mage/Adminhtml/controllers/Report/StatisticsController.php(159): Mage_Sales_Model_Resource_Report_Order->aggregate()
#9 /html/dev/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Adminhtml_Report_StatisticsController->refreshLifetimeAction()
#10 /html/dev/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('refreshLifetime')
#11 /html/dev/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#12 /html/dev/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#13 /html/dev/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#14 /html/dev/index.php(90): Mage::run('', 'store')
#15 {main}
Solution
This error could be anything from syntax errors in an extension that overrides the default resource collection to a database error. Lifetime stats refresh is handled by a method implemented on each individual resource model - that method is called aggregate
and it is wrapped in a try/catch block to prevent exceptions from being displayed to the user.
Line 159 (CE 1.8) of Mage_Adminhtml_Report_StatisticsController
is the part of the catch
that is key to figuring out the issue:
Mage::logException($e);
Which tells me that, if you have logging enabled, the file var/log/exception.log
should contain a stack trace that tells you specifically what the error is. To enable logging, navigate to System > Configuration > Developer and enable the logs.
In reality, the most likely scenario is that it is a db exception or a PHP out of memory error.
Edit
So, it seems as if you're getting a foreign key constraint error:
CONSTRAINT `FK_SALES_ORDER_AGGREGATED_CREATED_STORE_ID_CORE_STORE_STORE_ID` FOREIGN KEY (`store_id`) REFERENCES `core_store` (`store_id`)
This can come up because the store it's trying to enter no longer exists. I would debug this by getting a list of current store ids:
SELECT GROUP_CONCAT(store_id) as stores from core_store;
And matching it up with a list of historical sales store ids:
SELECT GROUP_CONCAT(DISTINCT store_id) as stores from sales_flat_order;
If the store ids don't match, you're probably going to need to replace the old ids on the old orders. Either try to inventory and update the orders manually with the correct store id, or change it to 0
- the admin store.
Other thoughts
You may also want to try truncating the sales_order_aggregated_created
table and re-running. Be extremely careful when truncating tables - always run (and test) a backup, do it when store is in maintenance mode, and test it on a staging/dev box prior.