Hi Marc,
4.1.0 is no worse in this regard than 4.0.x, however given that the
performance issues appeared to be the primary reason for the dropping of
5.1 in 4.1 (at least that was the implications from postings in the
discussions of the show databases command and disableIS issues), I thought
it important to express that, not just so the underlying issue can be
resolved for MySQL versions 5.5 and above, but also because a number of
distros still ship MySQL 5.1 as its default version, as do multiple shared
hosting providers and that keeping 5.1 support would probably benefit a
reasonable percentage of your userbase.
Unfortunately due to time constraints, offering a fully working solution is
not something I am able to do at present, however I can provide my
(admittedly horrifically hacky) solution that solves the most severe issue
experienced.
I added code to getData (libraries/navigation/Nodes/Node.class.php) which
is provided at the close of this message. The purpose of this was to simply
return a query object that contained the static information based on the
only_db contents. This way, the related node building functions did not
also need to be edited. For the start of a more complete solution, I would
add a check in there to make sure only_db is actually set before building
it, otherwise having it fall back over to the non database code, as the
code provided will fail if only_db is not set.
The only downside to this base approach is that if an only_db database does
not exist, it will still display on the navigation (whereas currently it
would not), however its children of course wont as they still use the
classic checks. It might however be an opportunity to display that fact, so
users who use only_db are informed they have non existent databases in
their list.
Following is probably some of the most horrible code to hit the mailing
list, but hopefully it gives someone who is more familiar with the PMA
codebase an idea. I shall also keep an eye on the mailing list in case I
get the time to offer something a little more substantial.
if ($type == 'databases')
{
$db_list = $GLOBALS['cfg']['Server']['only_db'];
$query = "SELECT * FROM ( SELECT '";
if (is_string($db_list))
{
$db_list = array($db_list);
}
if (count($db_list))
{
$query .= implode("' UNION ALL SELECT
'",$db_list);
$query .= "' ";
}
return $GLOBALS['dbi']->fetchResult($query . ") as
alias");
}
else
{
// ORIGINAL getData CODE
}
On Wed, Nov 20, 2013 at 4:42 AM, Marc Delisle <marc(a)infomarc.info> wrote:
Martyn Dale a écrit :
Hi,
Personally I do not think it is advisable to move forward until certain
issues have been addressed. I am talking about
https://sourceforge.net/p/phpmyadmin/bugs/3944 and related bug reports.
The alleged solution for 4.1 is requiring MySQL 5.5 as a minimum version.
This is not going to solve the problems that people have reported when
using the 4.x series with large systems, since while 5.5 is better than
5.1
and below, a full directory scan can still be
triggered by any number of
combinations of variables as described here:
http://dev.mysql.com/doc/refman/5.6/en/information-schema-optimization.html
I explained this in that bug report where i showed PMAs default usage of
IS
for the navigation on a *5.6* system (with
innodb_stats_on_metadata
switched off). While that was just a 2 second example, I have seen that
get
up to 60 seconds before query killers kick in.
Reports of users on shared
hosting accounts, where this kind of behavior can get users accounts
terminated has also already been reported (
https://sourceforge.net/p/phpmyadmin/bugs/3945, second page "Here is
what
one provider sent as a warning before *deleting
my account*")
If you remove the use of disableIS and related functionality, it will not
solve any issues. Take the SCHEMATA queries for example for getting
database lists, this still effectively does a full directory scan, as
documented:
http://dev.mysql.com/doc/refman/5.6/en/schemata-table.html
In this case for example, switching to IS to avoid using the slow
performing show databases is redundant since they basically do the same
thing. As a basic example, take a directory, with tens of thousands of
files, and attempt to do an ls in it, even unsorted (-U) it will take a
long time, simply because traversal of the filesystem takes time.
Requiring
higher versions isnt going to miraculously speed
up the iteration of
directories.
On a similar note, when I referenced *innodb_stats_on_metadata *in
earlier
mentioned bug report, I was using it as an
example of why relying on IS
can
be as bad, or worse than directly doing a show
tables, since it can
potentially end up doing additional work.
I am pretty worried that modifying the variable was considered as a
potential solution. The description of that very setting describes how it
affects how the system handles IS queries. An administrator should be
able
to trust that installing something like PMA is
not going to change any
system variables that could otherwise affect the operation of the system
Thank you for your consideration.
Regards,
Martyn
Thanks Martyn for your report. We'll discuss this issue before taking a
decision about 4.1.0-rc1.
Sadly, 4.1.0 will be released with some bugs in it, but we should avoid
regressions. So, in your opinion, is the current state of 4.1.0-beta
worse than 4.0.9, regarding this IS issue?
--
Marc Delisle
http://infomarc.info
------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing
conversations that shape the rapidly evolving mobile landscape. Sign up
now.
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.cl…
_______________________________________________
Phpmyadmin-devel mailing list
Phpmyadmin-devel(a)lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/phpmyadmin-devel