Bug #73859 MySql innodb_ft_max_token_size is not changing
Submitted: 9 Sep 2014 13:01 Modified: 27 Nov 2015 22:37
Reporter: Vikram Gharge Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: FULLTEXT search Severity:S1 (Critical)
Version:5.6.15, 5.6, 5.7, 5.6.27 OS:Any
Assigned to: CPU Architecture:Any
Tags: regression

[9 Sep 2014 13:01] Vikram Gharge
Description:
Unable to change innodb_ft_max_token_size variable value.

I have set that innodb_ft_max_token_size variable value to 512 in my.ini but it’s not changing in MySQL even after restarting MySQL service. Its giving default value as 84 (On Production Database Server).

In my local MySQL (Local Testing Server) if I am trying to change innodb_ft_max_token_size in my.ini then this variable value is getting reflected. 

Only change between local and production server is that local mysql version is 5.6.10 and production database server mysql version is 5.6.17

Please help me for this issue.

How to repeat:
Unable to change innodb_ft_max_token_size variable value.

I have set that innodb_ft_max_token_size variable value to 512 in my.ini but it’s not changing in MySQL even after restarting MySQL service. Its giving default value as 84 (On Production Database Server).

In my local MySQL (Local Testing Server) if I am trying to change innodb_ft_max_token_size in my.ini then this variable value is getting reflected. 

Only change between local and production server is that local mysql version is 5.6.10 and production database server mysql version is 5.6.17

Please help me for this issue.
[10 Sep 2014 12:33] MySQL Verification Team
Hello Vikram,

Thank you for the report.

# 5.6.22/5.7.6

// As per manual
Introduced	5.6.4
Command-Line Format	--innodb_ft_max_token_size=#
Option-File Format	innodb_ft_max_token_size
System Variable Name	innodb_ft_max_token_size
Variable Scope	Global
Dynamic Variable	No
Permitted Values
Type	        numeric
Default	        84
Min Value	10
Max Value	252

// Pass value at the commandline

[root@cluster-repo mysql-advanced-5.7.6]# bin/mysql_install_db --basedir=/data/ushastry/server/mysql-advanced-5.7.6 --datadir=/tmp/576
[root@cluster-repo mysql-advanced-5.7.6]# bin/mysqld --basedir=/data/ushastry/server/mysql-advanced-5.7.6 --datadir=/tmp/576 --innodb_ft_max_token_size=100 --user=root &
[1] 28475
[root@cluster-repo mysql-advanced-5.7.6]# 2014-09-12T02:31:29.334163Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2014-09-12T02:31:29.334396Z 0 [Note] bin/mysqld (mysqld 5.7.6-m16-enterprise-commercial-advanced) starting as process 28475 ...
2014-09-12T02:31:29.340620Z 0 [Warning] option 'innodb-ft-max-token-size': unsigned value 100 adjusted to 84

^^ Adjusted to 84

mysql> show variables like 'innodb_ft_max_token_size';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_ft_max_token_size | 84    |
+--------------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%version%';
+-------------------------+---------------------------------------------------------+
| Variable_name           | Value                                                   |
+-------------------------+---------------------------------------------------------+
| innodb_version          | 5.7.6                                                   |
| protocol_version        | 10                                                      |
| slave_type_conversions  |                                                         |
| version                 | 5.7.6-m16-enterprise-commercial-advanced                |
| version_comment         | MySQL Enterprise Server - Advanced Edition (Commercial) |
| version_compile_machine | x86_64                                                  |
| version_compile_os      | Linux                                                   |
+-------------------------+---------------------------------------------------------+
7 rows in set (0.00 sec)

 
Thanks,
Umesh
[10 Sep 2014 12:34] MySQL Verification Team
Looking at the src:

  // 5.6.20
  
  /home/ushastry/bzr/mysql/server/mysql-5.6/storage/innobase/include/fts0fts.h:
    368  
    369  /** Maximum possible Fulltext word length (in characters) */
    370  #define FTS_MAX_WORD_LEN_IN_CHAR	HA_FT_MAXCHARLEN
    
  /home/ushastry/bzr/mysql/server/mysql-5.6/include/ft_global.h:
       27  
       28  #define HA_FT_MAXBYTELEN 254
       29  #define HA_FT_MAXCHARLEN (HA_FT_MAXBYTELEN/3)
       
  /home/ushastry/bzr/mysql/server/mysql-5.6/storage/innobase/handler/ha_innodb.cc:
 16067    NULL, NULL, 3, 0, 16, 0);
 16068  
 16069  static MYSQL_SYSVAR_ULONG(ft_max_token_size, fts_max_token_size,
 16070    PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
 16071    "InnoDB Fulltext search maximum token size in characters",     
 
 So, may be doc need correction?
[11 Sep 2014 5:49] Vikram Gharge
Hi Umesh,

My local version is 5.6.10 and here I able to change the size of innodb_ft_max_token_size upto 252, but when I tried the same in version 5.6.15 on my production server its not get changing.

 If I try to change this variable value as 80 then its getting changed in production server mysql version 5.6.15 (means below of 84), but when I tried to set the value as 100 or more than 84 then its not getting changed and bydefault value get reset to 84.
[12 Sep 2014 7:56] Vikram Gharge
Hi Umesh,

Thanks for the reply sent on [10 Sep 12:33]

As per comments given by you on [10 Sep 12:33], Do I understand correctly that as per the code and configurations, the maximum value of this parameter can be 84 only and it is the documentation 
that is wrong in saying that it can be upto 252. 

Is there any way to change this maximum value by say making a change in the files(fts0fts.h,ft_global.h) you have mentioned to increase it beyond 84? 
Would that need us to recompile the entire codebase or is it just a change in those configuration files that is picked up at runtime. 

Also since we are able to change this parameter to more than 84 in 5.6.10, can you tell us in which version this change happened. 

Thank you so much for all your help.
[16 Sep 2014 7:41] MySQL Verification Team
Bug #73924 is marked as duplicate of this one.
[9 Apr 2015 10:20] Vikram Gharge
Dear Team,

Sorry to remind you again. Just I want to know about this bug status so is this bug is resolved yet?

Thanks and Regards,
Vikram Gharge
[27 Nov 2015 9:43] Shaohua Wang
Posted by developer:
 
the max value of INNODB_FT_MAX_TOKEN_SIZE was changed to 84 in 5.6.14.

See http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-14.html#mysqld-5-6-14-bug

Full-text search on InnoDB tables failed on searches for words containing apostrophes when using boolean operators. (Bug #69932, Bug #17276125)

84 means max word size, the byte size can be up to 252.

So we need to change our document:
http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_ft_max_token_s...

Change MAX VALUE from 252 to 84.
[27 Nov 2015 22:37] Daniel Price
The documentation was updated to reflect a innodb_ft_max_token_size value of
84 characters.
http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_ft_max_token_s...