This question already has an answer here:
Situation is I have simple mechanism, which sends messages from apex trigger to our processing server. My trigger framework creates object for every change and save it to the WorkflowQueue__c. There is job running which periodically withdraws items from WorkflowQueue__c table and sends them asynchronously outside SF.
Issue: When change on User object occurs, there is supposed to be inserted new object to the given table, but I get such message:
System.DmlException: Insert failed. First exception on row 0; first error: MIXED_DML_OPERATION, DML operation on setup object is not permitted after you have updated a non-setup object (or vice versa): WorkflowQueue__c, original object: User: 
Why is this happening? WorkflowQueue__c contains only some string and original User object is not edited/update. I cannot see why apex prevents me from inserting such unrelated object. I would by grateful for explanation. Thank you