Hi Sergei,

 I am bringing up this topic again with a performance related question.

 Since the plugin is returning blob fields which can be large, for performance 
considerations we’ve chosen to use mmap to obtain the blob values. However it 
seems that the Field_blob::store(…) is using a malloc/memcopy to store the 
field value. In my understanding this is not required for the blob fields (data 
is represented as a ptr + size). Is there a method where i could bypass the 
copying?

 If i can bypass the copying of course i need to keep the mmap active until 
mysql has no need for the data. Is it right that rnd_end()  is the earliest 
point where i can release the mmap?

Thanks
 Andras

-- 
Andras Szabo
Sent with Airmail

On 30 Jan 2015 at 19:05:34, Sergei Golubchik ([email protected]) wrote:

Hi, Andras!  

On Jan 30, Andras Szabo wrote:  
> Hi Sergei,  
>  
>  Thanks for the quick reply.  
>  
> 1. I have tried your suggestion (which is a cool simplification to my 
> bit-messing… ;). Unfortunately the code is crashing now:  
>  
> mariadb’s crash report shows the following stack trace:  
>  
> stack_bottom = 0x9e5de314 thread_stack 0x30000  
> mysys/stacktrace.c:246(my_print_stacktrace)[0x89912c5]  
> sql/signal_handler.cc:153(handle_fatal_signal)[0x841593a]  
> [0xb76f5c58]  
> [0xb76f5c7c]  
> /lib/i386-linux-gnu/libc.so.6(gsignal+0x47)[0xb70e6607]  
> /lib/i386-linux-gnu/libc.so.6(abort+0x143)[0xb70e7d83]  
> /lib/i386-linux-gnu/libc.so.6(+0x27757)[0xb70df757]  
> /lib/i386-linux-gnu/libc.so.6(+0x27807)[0xb70df807]  
> sql/field.cc:6876(Field_varstring::store(char const*, unsigned int, 
> charset_info_st const*))[0x840032c]  
> /usr/local/mysql/lib/plugin/ha_fsview.so(_ZN9ha_fsview8rnd_nextEPh+0xec)[0xb70adb00]
>   

You didn't tell why it's failing - it was in the log before the stack  
trace. I suspect it was signal 6 - abort (jugding from abort in the  
stack trace). Then it must be that ASSERT_COLUMN_MARKED_FOR_WRITE_OR_COMPUTED,  
and I suppose you're using debug build of the server.  

A fix would be to start your method with  

my_bitmap_map *old_map = dbug_tmp_use_all_columns(table, table->write_set);  

and to finish it with  

dbug_tmp_restore_column_map(table->write_set, old_map);  

A longer explanation is here: http://mariadb.atlassian.net/browse/MDEV-6381  

Regards,  
Sergei  
_______________________________________________
Mailing list: https://launchpad.net/~maria-developers
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~maria-developers
More help   : https://help.launchpad.net/ListHelp

Reply via email to